В текстовой базе данных каждое слово текста находится в одной строке, и имеет свой уникальный идентификатор, который определяет последовательность. БД статичен, текст не будет изменен, вставки или удаления не будут сделаны. Так что это выглядит так: < /p> tableName = "text" < /p>
Id | Word
---------
1 | The
2 | texts
3 | articles
4 | and
5 | conversations
6 | are
7 | brief
8 | and
9 | appropriate
10 | for
11 | all
... | ...
< /code>
Теперь пользователь должен иметь возможность выполнять поиск KWIC (ключевое слово в контексте), результат должен быть, например, Когда пользователь ищет «разговоры», а контекст составляет 2 (то есть 2 слова слева и 2 слова справа), результат должен быть «статьи и разговоры - краткие». Если они ищут «и» в данном примере, и контекст снова 2, они должны получить оба «текстовых статей и разговоров», а «и» - это краткие и подходящие для ».SELECT * FROM text
WHERE Id
BETWEEN ((SELECT Id FROM text WHERE Word='conversations') - 2)
AND ((SELECT Id FROM text WHERE Word='conversations') + 2)
< /code>
Это работает нормально, но только если поисковое слово происходит только один раз в тексте. (Это имеет место с «разговорами».) Если поисковый термин происходит несколько раз в тексте (например, если «разговоры» в запросе заменяются «и»), он вылетает, вероятно, потому что результат внутренних выборов в этом случае не является одним идентификатором, а списком идентификаторов. Я был бы признателен, если бы кто -то мог дать мне совет о том, как справиться с несколькими случаями поискового термина. Спасибо! Я попробовал это вместе с функцией concat, и запрос теперь выглядит так: < /p>
SELECT Word, temp FROM
(SELECT Word, CONCAT (
LAG(Word, 1) OVER (ORDER BY Id),
' ', Word, '[/b] ',
LEAD(Word, 1) OVER (ORDER BY Id))
AS temp FROM text) t
WHERE Word='and';
теперь дает результаты «articels и разговоры» и «Краткое и соответствующие», как и ожидалось. Кроме того, поисковое слово («и») может быть выделено жирным шрифтом, что является отличным побочным продуктом. 10 или макс. 20. Это число должно быть определена пользователем в окончательном приложении. Есть ли способ, как это может быть достигнуто?
В текстовой базе данных каждое слово текста находится в одной строке, и имеет свой уникальный идентификатор, который определяет последовательность. БД статичен, текст не будет изменен, вставки или удаления не будут сделаны. Так что это выглядит так: < /p> [b] tableName = "text" < /p> [code]Id | Word --------- 1 | The 2 | texts 3 | articles 4 | and 5 | conversations 6 | are 7 | brief 8 | and 9 | appropriate 10 | for 11 | all ... | ... < /code> Теперь пользователь должен иметь возможность выполнять поиск KWIC (ключевое слово в контексте), результат должен быть, например, Когда пользователь ищет «разговоры», а контекст составляет 2 (то есть 2 слова слева и 2 слова справа), результат должен быть «статьи и разговоры - краткие». Если они ищут «и» в данном примере, и контекст снова 2, они должны получить оба «текстовых статей и разговоров», а «и» - это краткие и подходящие для ».SELECT * FROM text WHERE Id BETWEEN ((SELECT Id FROM text WHERE Word='conversations') - 2) AND ((SELECT Id FROM text WHERE Word='conversations') + 2) < /code> Это работает нормально, но только если поисковое слово происходит только один раз в тексте. (Это имеет место с «разговорами».) Если поисковый термин происходит несколько раз в тексте (например, если «разговоры» в запросе заменяются «и»), он вылетает, вероятно, потому что результат внутренних выборов в этом случае не является одним идентификатором, а списком идентификаторов. Я был бы признателен, если бы кто -то мог дать мне совет о том, как справиться с несколькими случаями поискового термина. Спасибо! Я попробовал это вместе с функцией concat, и запрос теперь выглядит так: < /p> SELECT Word, temp FROM (SELECT Word, CONCAT ( LAG(Word, 1) OVER (ORDER BY Id), ' ', Word, '[/b] ', LEAD(Word, 1) OVER (ORDER BY Id)) AS temp FROM text) t WHERE Word='and'; [/code] теперь дает результаты «articels [b] и [/b] разговоры» и «Краткое [b] и [/b] соответствующие», как и ожидалось. Кроме того, поисковое слово («и») может быть выделено жирным шрифтом, что является отличным побочным продуктом. 10 или макс. 20. Это число должно быть определена пользователем в окончательном приложении. Есть ли способ, как это может быть достигнуто?