Код: Выделить всё
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';
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-database