2011-01-18 3 views
6

Я новичок в поиске полнотекстового поиска SQL Server и пытаюсь найти лучший способ поиска по нескольким словам с использованием флексивного движка, поэтому поиск использует различные формы всех слов.Поиск по полнотекстовому поиску SQL Server с использованием CONTAINS, FORMSOF, NEAR для нескольких слов поиска

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

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

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)') 

Однако запрос ниже работает, но я не знаю, если это дает ожидаемые результаты. Есть ли разница между «AND» и «NEAR» с полнотекстовым поиском SQL?

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)') 

Я предполагаю, что я спрашиваю, есть ли способ использовать СОДЕРЖИТ, FORMSOF, и NEAR с несколькими поисковыми словами? Или я должен просто использовать второй запрос выше, который использует «И»?

ответ

9

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

<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")') 
Смежные вопросы