Основы полнотекстового поиска

Источник: realcoding

Основы полнотекстового поиска

Я создал полнотекстовый индекс в таблице и у меня есть несколько вопросов о возможностях компонента полнотекстового поиска в SQL Server. Во-первых, работает ли полнотекстовый поиск с суффиксами (т.е. можно ли по фразе * mation  отыскать такое слово, как  information )? Во-вторых, можно ли с помощью полнотекстового поиска находить слова, расположенные рядом друг с другом? Если да, то сколько слов максимально могут разделять искомые слова? В-третьих, как модифицировать список "словесного шума"?

На первый вопрос ответ следующий: непосредственно использовать поиск по суффиксу нельзя. Однако это ограничение можно обойти двумя способами. Во-первых, с помощью предиката LIKE в выражениях типа WHERE mytext LIKE N'%suffix ' . Однако использование LIKE приводит к сканированию всех строк таблицы, в которой проводится поиск, и это может сказаться на производительности. Во-вторых, можно продублировать и проиндексировать данные в обратном порядке (т.е. imagination становится  noitanigami ), а затем выполнить поиск по  noitani* .

Ответ на второй вопрос - да,  поиск с зазором ( proximity search  - вид поиска, при котором пользователь указывает, на каком расстоянии друг от друга должны располагаться ключевые слова в документе) возможен. Вот пример использования такого поиска:

USE pubs
GO
SELECT title, notes
FROM titles
WHERE CONTAINS (notes, 'user NEAR computers')
GO

Вы можете использовать знак тильды (~) и различные сочетания постфиксных операторов. Дополнительную информацию по этому вопросу можно найти в статье "Searching for Words or Phrases Close to Another Word or Phrase (Proximity Term)" в SQL Server  Books Online  -  BOL . Оценочные значения, которые возвращаются при поиске, зависят от ключевого слова NEAR. Если использовать оператор CONTAINSTABLE, то можно получить эти оценочные значения и продолжить эксперимент с поиском.

Для ответа на третий вопрос вспомним, что символы разрыва слов - это неотъемлемая часть используемого языка программирования, и вы можете модифицировать список  словесного шума  ( noise-word ). Словесный шум - это слова, которые автоматически исключаются из запроса на полнотекстовый поиск. Например, из обычного запроса исключаются слова типа  a, and, the . В статье "Full-Text Index and Querying Concepts" в  BOL  поясняется, как изменить список словесного шума. Необходимо быть внимательным при модификации списка, так как если допустить в запросе большее количество слов, размер индекса может сильно возрасти.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=29770