SQL Server Полнотекстовый поиск с ранжированием по нескольким полям - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать очень простую поисковую систему для библиотеки.

У меня есть таблица [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

и результат следующий:

enter image description here

Выделенная строка, строка № 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;

1 Ответ

0 голосов
/ 08 января 2019

Вот ссылка на документацию алгоритмов ранжирования и Запрос с полнотекстовым поиском

Из документации:

СОДЕРЖИТ / CONTAINSTABLE
Сопоставляйте отдельные слова и фразы с точным или нечетким (менее точным) соответствием. Вы также можете сделать следующие вещи: Укажите близость слов на определенном расстоянии друг от друга. Вернуть взвешенные совпадения. Объедините условия поиска с логическими операторами.

FREETEXT / FREETEXTTABLE
Соответствуйте смыслу, но не точной формулировке, заданных слов, фраз или предложений (строка свободного текста). Совпадения создаются, если какой-либо термин или форма любого термина найдены в полнотекстовый индекс указанного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...