Главная » Microsoft SQL Server, Базы данных » Нечеткий поиск

0

В то время как предикат contains и создаваемая функцией ContainsTable таблица выполняют точный поиск слов, функция contains позволяет выполнять и приблизительный. так называемый нечеткий поиск.

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

Параметр freetext

Параметр FREETEXT используется в предложении WHERE, практически как CONTAINS, но не задействует дополнительные атрибуты. Следующий запрос выполнит нечеткий поиск басни о зайце и черепахе:

SELECT Title FROM Fable WHERE FREETEXT (*,’The tortoise beat the hare in the big race’)

Будет получен следующий результат:

Title

The Hare and the Tortoise

Параметр freetexttable

Этот параметр имеет преимущество перед FREETEXT в том, что ранжирует результаты практически так же, как функция ContainsTable. Два примера, представленных в настоящем разделе, демонстрируют нечеткий полнотекстовый поиск с использованием функции FREETEXTTABLE.

SELECT Fable.Title, FTS.Rank FROM Fable

JOIN FREETEXTTABLE (Fable, *# ‘The brave hunter kills the lion’,20) FTS ON Fable.FablelD = FTS.[KEY]

ORDER BY Rank DESC

Результат выполнения запроса:

Title                                                                              Rank

The Hunter and the Woodman                              2 57

The Ass in the Lion’s Skin                                      202

The Wolf and the Kid                                                 187

Androcles                                                                     113

The Dogs and the Fox                                             10 0

The Goose With the Golden Eggs                           72

The Shepherd’s Boy and the Wolf                          72

А вот и второй запрос:

SELECT Fable.Title, FTS.Rank FROM Fable

JOIN FREETEXTTABLE (Fable, *, ‘The eagle was shot by an arrow’,20) FTS ON Fable.FablelD = FTS.[KEY]

ORDER BY Rank DESC

Результат данного запроса следующий:

Title                                                                                        Rank

The Eagle and the Arrow                                              288

The Eagle and the Fox                                                  135

The Serpent and the Eagle                                         112

The Hunter and the Woodman                                   102

The Father and His Two Daughters                          72

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии