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")')