Я пытаюсь создать очень простую поисковую систему для библиотеки.
У меня есть таблица [Tales], которая содержит следующие полнотекстовые индексированные столбцы TITLE
, AUTHOR
и GENRE
.
Пользователь может ввести поисковую фразу, например: «американская война Дэвида Поттера»
Я разбил каждое слово, построив следующий запрос:
SELECT TOP (100)
[title],
[author],
[genre],
[TaleID],
k.[RANK]
FROM
[Books].[dbo].[Tales] AS t
INNER JOIN
CONTAINSTABLE([Tales] , *, '"history" OR "america" OR "war" OR "by" OR "david" OR "potter"') AS k ON t.TaleID = k.[key]
ORDER BY
k.[RANK] DESC
и результат следующий:
Выделенная строка, строка № 28, должна быть строкой с более высоким рейтингом, поскольку она содержит все слова, найденные пользователем. Вместо этого кажется, что полнотекстовый движок предпочитает множественные вхождения одного и того же слова «американский».
Что не так с моим запросом?
РЕДАКТИРОВАТЬ : при попытке с FREETEXTTABLE
результаты совпадают. Но, добавив больше терминов, я могу получить верный результат:
SELECT TOP (1000)
[title],
[author],
[genre],
[publisher],
[storyteller],
[TaleID],
k.[RANK]
FROM
[Books].[dbo].[Tales] AS t
INNER JOIN
FREETEXTTABLE([Tales], ([title],[author],[genre]), 'history of america''s civil war by david potter') as k ON t.TaleID = k.[key]
ORDER BY
k.[RANK] DESC;