Синтаксис полнотекстового поиска SQL Server - PullRequest
3 голосов
/ 26 января 2012

Документация Microsoft для CONTAINS включает в свои примеры следующие два пункта:

CONTAINS(Name, ' "Mountain" OR "Road" ')

А также ...

CONTAINS(Description, ' Aluminum AND spindle ');

Обратите внимание, что первый примерпомещает оба условия поиска в двойные кавычки, в то время как во втором примере нет.Кажется, я не могу найти нигде, где это объясняет, в чем разница между ними.

Поскольку ни FORMSOF(INFLECTIONAL, ...), ни FORMSOF(THESAURUS, ...) не используются, я могу только предположить, что слова сравниваются буквально в обоих случаях.Это будет означать, что обе версии равны.Так зачем включать их в двойные кавычки в первом примере?

1 Ответ

3 голосов
/ 26 января 2012

Насколько я понимаю, кавычки строго обязательны, когда поисковая фраза содержит подстановочный знак или несколько слов. Если поисковая фраза является одним словом и не использует подстановочный знак, то, строго говоря, двойные кавычки не требуются.

CONTAINS(LastName, 'Anders') --double quotes not required
CONTAINS(LastName, '"Anders*"') --double quotes required since wildcard used.  Match Anders, Anderson, etc
CONTAINS(Title,  '"End of time"') --double quotes required, since multiple words

Конечно, двойные кавычки все еще можно использовать, даже если они не обязательны:

CONTAINS(LastName, '"Anders"')

Вот цитата BOL относительно необходимости двойных кавычек при использовании подстановочного знака:

Если текст и звездочка не разделены двойными кавычками, поэтому предикат читает CONTAINS (столбец, 'text *'), полнотекстовый поиск считает звездочку символом и ищет точные совпадения с текстом *.>

...