全文搜索词干提取未返回不同语言的一致结果



我有一个 Sql Server 2016 数据库,其中包含在 4 列上定义的全文索引,每列都配置为不同的语言:荷兰语、英语、德语和法语。我使用该向导设置了全文索引。

我正在使用 CONTAINSTABLE 和FORMSOF对于每种语言,我希望使用词干或任何动词形式执行查询将返回示例表中的两个结果。这似乎适用于英语和德语,有些法语,而荷兰语则完全不行。

我正在使用一个非常基本的示例,其中包含每种语言中的"运行"动词形式,因此我认为某些内容可能配置不正确。

示例表

+----+-------------+--------------+-----------------+----------------+ |身份证 |关键词NL | 关键词 EN |  关键词DE |  关键词FR | +----+-------------+--------------+-----------------+----------------+ | 1 |IK 循环 |我跑 |Ich Laufe |JE 库尔斯 | | 2 |益嘎洛彭 |我在跑步 |格赫劳芬 |JE Vais Courir | +----+-------------+--------------+-----------------+----------------+

英语查询

CONTAINSTABLE (SearchResult, KeyWordsEN, 'FORMSOF(INFLECTIONAL, "run")')
CONTAINSTABLE (SearchResult, KeyWordsEN, 'FORMSOF(INFLECTIONAL, "running")')

为每个查询返回 1 和 2

德语查询

CONTAINSTABLE (SearchResult, KeyWordsDE, 'FORMSOF(INFLECTIONAL, "laufe")')
CONTAINSTABLE (SearchResult, KeyWordsDE, 'FORMSOF(INFLECTIONAL, "laufen")')

为每个查询返回 1 和 2

法语查询

CONTAINSTABLE (SearchResult, KeyWordsFR, 'FORMSOF(INFLECTIONAL, "cours")')
CONTAINSTABLE (SearchResult, KeyWordsFR, 'FORMSOF(INFLECTIONAL, "courir")')

仅在第一个查询(cours)中返回记录1,第二个查询返回1和2

荷兰语查询

CONTAINSTABLE (SearchResult, KeyWordsNL, 'FORMSOF(INFLECTIONAL, "loop")')
CONTAINSTABLE (SearchResult, KeyWordsNL, 'FORMSOF(INFLECTIONAL, "lopen")')

在第一个查询(循环)中仅返回记录1,在第二个查询中返回记录 2 (LOPEN)

编辑:进一步测试...

可以使用sys.dm_fts_parser测试 fts 如何解析输入查询。这清楚地表明,"荷兰语"根本没有发生词干。在不同的机器上测试。

获取语言 LCID:

select * from sys.fulltext_languages where name in ('Dutch','English','German','French')
select * from sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "koe")', 1043, 0, 0)
select * from sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "cow")', 1033, 0, 0)

荷兰语查询的结果是"koe",而英语查询的结果是"cow's"、"cowed"、"cowing"、"cows"、"cows"、"cows"。

我尝试的每个单词都会发生同样的情况,荷兰语中没有任何单词的额外形式,而英语通常返回 5-10 个单词形式。

我发现根本没有针对荷兰语(和其他语言)的特定词干库。它没有明确说明,但本文解释了如何将断字符和词干恢复到以前的版本,并且似乎分词系统和词干分析器实际上使用相同的 dll。

以下查询显示,对于荷兰语 (LCID 1043),使用默认的中性语言断字符/词干分析器,这解释了错误的结果。

EXEC sp_help_fulltext_system_components 'wordbreaker';

要获取每种语言的 LCID,请执行以下操作:

SELECT * FROM sys.fulltext_languages; 

最新更新