Я создал полнотекстовый индекс в таблице и у меня есть несколько вопросов о возможностях компонента полнотекстового поиска в 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 поясняется, как изменить список словесного шума. Необходимо быть внимательным при модификации списка, так как если допустить в запросе большее количество слов, размер индекса может сильно возрасти.