2009-07-23 4 views
1

Мне было интересно, действительно ли SQL Server использует свой полнотекстовый индекс для поиска, который может находиться в середине текста (например, LIKE% searchKeyword%)?SQL Server FullText on% searchKeyword%

Я забыл, где я его прочитал, но где-то я читал, что полный текст будет использоваться только в том случае, если он используется в стиле «StartsWith» (searchKeyword%), где вы ищете LIKE с фиксированным началом и переменная завершается.

Пожалуйста, дайте мне знать, если это правда?

ответ

0

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

и слово men находится в середине их содержимого. Надеюсь, поможет.

http://www.catalogues4u.com.au/Search.aspx?keyword=men

+0

К сожалению, это просто не соответствует действительности - см. мой пост и читать две документации ссылки полнотекстовый SQL Server не поддерживает поиске% мужчин% или * мужчины * –

+0

я думаю. вопрос не использует% men% в качестве ключевого слова. о том, что ключевое слово находится внутри абзаца или фразы. исправьте меня, если я ошибаюсь – Aneef

1

Полнотекстовые индексы (если они у вас есть, они не включены по умолчанию) доступны с помощью функции, такие как СОДЕРЖИТ() и FREETEXT(), а не оператор LIKE ,

Нормальные индексы (например, «CREATE INDEX ON ix_tbl_fld туЬаЫе (текстовое поле)») может быть использован оператором в LIKE, но не тогда, когда шаблон начинается с% шаблона ... эти поиски требуют сканирования всех значений в таблице.

Если у вас есть много строк с одинаковым значением неоднократного, используя сжатие таблицы под SQL Server 2008 может повысить производительность LIKE «% ключевого слова%» поиска, даже без индекса (я не имею это, поэтому я не могу проверить эту теорию ...).

+0

Как бы вы обращались к Содержит или Freetext через запрос Linq? Я использовал «StartsWith» (например, строковая функция), которая превращается в запрос LIKE %%, когда реализуется. Как мне получить доступ к методам индекса freetext, которые вы описываете из C#/LINQ? – Alex

+0

Извините, я избегаю LINQ, именно по этой причине - слишком непроницаемая абстракция для мой вкус. – richardtallent

0

Если вы внимательно прочитали документацию MSDN, вы увидите, что вы можете искать только фиксированные выражения типа «хоккей» или для префиксных выражений, таких как «хоккей», - но не для чего-либо еще, к сожалению.

См:

Supported Forms of Query Terms

Performing prefix searches

К сожалению, это в значительной степени все, что есть. Вы не можете искать «хоккей» :-(

Марк

0

Лучший способ сделать поиск свободного текста в SQL Server, что дает не только мощный инструмент поиска *, но и возвращает ваши результаты ранжируются заключается в использовании FreeTextTable

например:..

SELECT * 
FROM FreeTextTable(YourTableName,(Column1,Column2), 'search term') 
INNER JOIN YourTableName as T ON T.ID = [Key] ORDER BY RANK DESC 

Это даст вам ранг результаты в порядке, как близко они соответствуют (через колонку RANK)

  • «Любой текст, включая слова, фразы или предложения, может быть введен. Матчи генерируются, если в полнотекстовом индексе содержится какой-либо термин или формы любого термина ....freetext_string является сломанным, прерывается и проходит через тезаурус. Если freetext_string заключен в двойные кавычки, вместо этого выполняется совпадение фразы; морфологии и словаря синонимов не выполняются»