SQL Server FTS индексирует правильные ключевые слова, но не возвращает результаты с этими ключевыми словами - PullRequest
0 голосов
/ 06 июля 2019

Я создал каталог FTS, который индексирует столбец Заголовок таблицы под названием Статьи.Язык средства разбиения по словам установлен на нидерландский язык.

Название статьи - "Contactgegevens Wijkteams 2019".Мой поисковый запрос - это contactgegevens, что в переводе с голландского означает «Контактные данные».Это слово потенциально может быть разделено на «контакт» и «gegevens», хотя я проверил проиндексированные ключевые слова, которые успешно проиндексировали полное слово из правильной таблицы / столбца.

Условие поиска:

declare @searchTerm nvarchar(100) 
select @searchTerm = 'contactgegevens';

Использование свободного текста:

Если я использую FREETEXT в предложении where, я нахожу результат, но он подходит к концуоколо 300 рядов.У большинства строк нет этого слова в столбце заголовка, даже слова, близкие по значению.

SELECT a.ArticleID, a.Title
FROM Articles a
WHERE
    FREETEXT(a.Title, @searchTerm))

Использование FreeTextTable:

С FREETEXTTABLE я получаю гораздо меньше результатов, но ни одно из них не содержит ключевого слова: 'contactgegevens' или его вариантов.

select * 
from 
    freetexttable(Articles, Title, @search, LANGUAGE N'Dutch', 100) as key_table
inner join 
    Articles a on a.ArticleID = key_table.[Key]
order by 
    key_table.RANK desc

Использование ContainsTable:

CONTAINSTABLE, похоже, возвращает очень похожие результаты к FREETEXTTABLE.

SELECT key_table.rank, a.*
FROM Articles a
INNER JOIN
    CONTAINSTABLE(Articles, Title, @searchTerm, LANGUAGE N'Dutch', 100) AS key_table on key_table.[KEY] = a.ArticleID 
WHERE
ORDER BY 
    key_table.rank DESC

Как уже упоминалось, я проверил проиндексированные ключевые слова, используя следующий запрос:

select * 
from sys.dm_fts_index_keywords(DB_ID('MyDatabase'), OBJECT_ID('Articles'))
where (display_term like 'contactgegevens%') and column_id = 3
order by display_term

, и ключевое слово индексируется для правильной таблицы / столбца и просматривая записи, близкие к этому.В результате я вижу, что он проиндексирован другими словами, относящимися к названию статьи, которую я ищу.

Я ожидаю, что смогу выполнить поиск по фразе, такой как "Contactgegevens Wijkteams 2019", и статья с таким точным названием появится в верхней части списка, но это не так.В некоторых случаях он вообще не появляется в результатах поиска.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 июля 2019

Оказывается, это была простая ошибка с моей стороны. Мое объединение использовало ArticleID вместо ArticleVersionID, который каталог использует в качестве своего уникального ключа и который представляет собой key_table. [KEY].

SELECT key_table.rank, a.*
FROM Articles a
INNER JOIN
    CONTAINSTABLE(Articles, Title, @searchTerm, LANGUAGE N'Dutch', 100) AS key_table on key_table.[KEY] = a.ArticleVersionID 
WHERE
ORDER BY 
    key_table.rank DESC
...