MongoDB 文本索引的词干分析无法正常工作

2023-12-12

我正在尝试使用 MongoDB 的全文搜索功能并观察一些意外的行为。该问题与文本索引功能的“词干”方面有关。在线许多文章中都描述了全文搜索的方式,如果文档字段中有一个字符串“big Hunting dogs”,并且该字段是文本索引的一部分,那么您也应该能够搜索“hunt”或“hunting”如“狗”或“狗”。 MongoDB 应在索引和搜索时对文本进行标准化或词干化。因此,在我的示例中,我希望它将单词“dog”和“hunt”保存在索引中,并搜索这些单词的词干版本。如果我搜索“hunting”,MongoDB 应该搜索“hunt”。

嗯,这对我来说不是这样的。我在 Linux 上运行 MongoDB 2.4.8,并启用了全文搜索。如果我的记录值为“big Hunting dogs”,则仅搜索“big”就会产生结果,而搜索“hunt”或“dog”则不会产生任何结果。就好像未处于“规范化”形式的单词未存储在索引文本中(或以无法找到它们的方式存储)。使用 $regex 运算符进行搜索效果很好,也就是说,我可以通过搜索 /hunting/ 这样的字符串来查找相关字段,从而找到文档。

我尝试删除并重新创建全文索引 - 没有任何改变。我只能找到包含“正常”形式的单词的文档。搜索“狗”或“狩猎”(甚至“狗”或“狩猎”)等词不会产生任何结果。

我是否误解或误用了全文搜索操作,或者 MongoDB 中是否存在错误?


经过大量的实验和摸索之后,我发现了这种行为的原因。事实证明,相关集合中的文档具有“语言”属性。显然,该属性的存在和值使得这些文档不可搜索。 (该值恰好是“ENG”。将其更改为“eng”可能会使该文档再次可搜索。但是,该字段具有完全不同的用途)。将字段重命名为“lang”后,我可以通过搜索“dog”或“dogs”找到包含单词“dogs”的文档。

我想知道这是否是 MongoDB 的预期行为——文档中语言属性的存在会影响文本搜索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 文本索引的词干分析无法正常工作 的相关文章

随机推荐