Полнотекстовый поиск SQL Server с использованием CONTAINS, FORMSOF, NEAR для нескольких поисковых слов - PullRequest
7 голосов
/ 18 января 2011

Я новичок в полнотекстовом поиске SQL Server и пытаюсь найти наилучший способ поиска по нескольким словам, используя инфлективный механизм, чтобы при поиске использовались различные формы всех слов.

Из того, что я прочитал, FREETEXT использует неявное ИЛИ при использовании с несколькими словами.Я хочу AND, чтобы результаты поиска содержали все слова, поэтому я решил использовать CONTAINS.

Я пытаюсь сделать что-то вроде запроса ниже, который использует FORMSOF с ключевым словом близости.РЯДОМ для нескольких слов.Обратите внимание, что это неверный синтаксис и возвращает ошибку:

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 Ответ

10 голосов
/ 18 января 2011

Из документов:

<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")')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...