0

我创建了一个 FTS 目录,它为名为 Articles 的表的 Title 列编制索引。分词器语言设置为荷兰语。

文章标题为“Contactgegevens Wijkteams 2019”。我的搜索词是“contactgegevens”,它是荷兰语的“联系方式”。尽管我已经检查了已成功索引正确表/列中的完整单词的索引关键字,但该单词可能会被拆分为“contact”和“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,我得到的结果要少得多,但其中没有一个包含关键字:'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似乎返回非常相似的结果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”之类的短语,并将具有该确切标题的文章显示在列表顶部,但事实并非如此。在某些情况下,它根本不会出现在搜索结果中。

我在这里想念什么?

4

1 回答 1

0

原来这是我的一个简单错误。我的加入使用的是 ArticleID 而不是 ArticleVersionID,这是 Catalog 用作其唯一键的内容,并且由 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
于 2019-07-19T10:23:07.710 回答