SQL содержит вопрос - PullRequest
       12

SQL содержит вопрос

3 голосов
/ 06 августа 2011

Может кто-нибудь объяснить это мне? У меня есть два запроса ниже с их результатами.


запрос

select * from tbl where contains([name], '"*he*" AND "*ca*"')

результат набора :

Прокат автомобилей Hertz

Кантина Хемингуэя


запрос

select * from tbl where contains([name], '"*he*" AND "*ar*"')

результат набора

ничего


Первый запрос - это то, что я ожидал, однако я ожидал, что второй запрос вернет "Hertz Car Rental". Я в корне не понимаю, как '*' работает в полнотекстовом поиске?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 06 августа 2011

Я думаю, что SQL Server интерпретирует ваши строки как prefix_terms.Звездочка не является простым указателем подстановочных знаков.Полный текст и Содержит ориентированы на слова.Для того, что вы пытаетесь сделать, вам лучше использовать простой старый LIKE вместо CONTAINS.

http://msdn.microsoft.com/en-us/library/ms187787.aspx

4 голосов
/ 06 августа 2011

"*" работает только как суффикс. Если вы используете его в качестве префикса, таблицу нужно сканировать независимо от того, что и индекс бесполезен. В этот момент вы могли бы также сделать

  Select * From Table Where (Name Like '%he%') And (Name Like '%ar%')
0 голосов
/ 06 августа 2011

Я бы попробовал заменить * на%, чтобы увидеть, как это происходит.

select * from tbl where contains([name], '"%he%" AND "%ar%"') 
...