【发布时间】:2014-05-11 02:41:38
【问题描述】:
我正在尝试使用 MongoDB 的全文搜索功能并观察到一些意外行为。该问题与文本索引功能的“词干”方面有关。网上很多文章都描述了全文搜索的方式,如果你在文档的字段中有一个字符串“大猎狗”是文本索引的一部分,你应该也可以搜索“狩猎”或“狩猎”如“狗”或“狗”。 MongoDB 应该在索引和搜索时规范化或停止文本。因此,在我的示例中,我希望它在索引中保存单词“dog”和“hunt”并搜索这些单词的词干版本。如果我搜索“hunting”,MongoDB 应该搜索“hunt”。
好吧,这对我来说不是这样。我在启用全文搜索的 Linux 上运行 MongoDB 2.4.8。如果我的记录具有“大猎犬”的值,则仅搜索“大”会产生结果,而搜索“狩猎”或“狗”则不会产生任何结果。就好像不是“标准化”形式的单词没有存储在索引的文本中(或以无法找到它们的方式存储)。使用 $regex 运算符进行的搜索工作正常,也就是说,我可以通过在 /hunting/ 之类的字符串上搜索相关字段来找到文档。
我尝试删除并重新创建全文索引 - 没有任何改变。我只能找到包含“正常”表格上的单词的文档。搜索“dogs”或“hunting”(甚至“dog”或“hunt”)之类的词不会产生任何结果。
是我误解或误用了全文搜索操作还是 MongoDB 中存在错误?
【问题讨论】:
-
您确实阅读了“测试版”的部分,不是。同样的问题也被问到today
-
尼尔,谢谢你的参考。我也确实看到了您所指的问题。如果你仔细观察,我们的问题就大不相同了。其他问题的作者抱怨说,在词干实现中存在一个微妙的缺陷,这使得 MongoDB 无法识别某些非标准英语复数形式的派生词(如鼠标或标准)。我的抱怨是,即使使用标准复数,词干在我的环境中也根本不起作用。如果我的文档中有“季节”一词,我无法使用全文搜索找到该文档。这个词适用于其他帖子的作者。
-
您能否提供一个或 2 个示例文档以及您用于创建索引和运行搜索的命令?
标签: mongodb search indexing full-text-search stemming