SQL Server полнотекстовый поиск с использованием содержит, FORMSOF, рядом для нескольких слов поиска
Я новичок в полнотекстовом поиске SQL Server и пытаюсь найти лучший способ поиска по нескольким словам, используя механизм перегиба, поэтому поиск использует различные формы всех слов.
из того, что я читал, FREETEXT использует неявное или при использовании с несколькими словами. Я хочу, чтобы результаты поиска содержали все слова, поэтому из-за этого я выбираю использовать CONTAINS.
Я пытаюсь сделать что-то вроде запроса ниже использует FORMSOF с ключевым словом proximity NEAR для нескольких слов. Обратите внимание, что это недопустимый синтаксис и возвращает ошибку:
select top 5 *
from content
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)')
однако запрос ниже работает, но я не знаю, дает ли он ожидаемые результаты. Есть ли разница между "И" и "рядом" с полнотекстовым поиском SQL?
select top 5 *
from content
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)')
Я думаю, что я спрашиваю, есть ли способ использовать CONTAINS, FORMSOF и NEAR с несколькими словами поиска? Или я должен просто использовать второй запрос, что использует "И"?
1 ответов
документы:
<proximity_term> ::=
{ <simple_term> | <prefix_term> }
{ { NEAR | ~ }
{ <simple_term> | <prefix_term> }
} [ ...n ]
Это означает, что вы можете использовать NEAR
предикат для (возможных префиксов) слов, фраз и их комбинаций.
поскольку ваши условия поиска изменяются с использованием довольно простых правил, вы можете просто использовать префиксы:
SELECT *
FROM content
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*')
или использовать AND
и выполните тонкую фильтрацию на стороне клиента
SELECT *
FROM ft
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")')