首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于MongoDB文本索引,词干不能正常工作。

对于MongoDB文本索引,词干不能正常工作。
EN

Stack Overflow用户
提问于 2014-03-31 16:26:43
回答 3查看 2.5K关注 0票数 3

我试图使用MongoDB的全文搜索功能,并观察一些意想不到的行为。这个问题与文本索引功能的“词干”方面有关。全文搜索的方式在许多在线文章中都有描述,如果文档的字段中有一个字符串“大型猎犬”是文本索引的一部分,那么您应该能够搜索“狩猎”或“狩猎”以及“狗”或“狗”。MongoDB在索引时和搜索时都应该规范或停止文本。所以在我的例子中,我希望它能在索引中保存单词“狗”和“狩猎”,并搜索这个词的词根版本。如果我搜索“狩猎”,MongoDB应该搜索“狩猎”。

对我来说不是这样的。我在Linux上运行MongoDB 2.4.8,启用全文搜索。如果我的记录有价值的“大猎犬”,只有搜索“大”才会产生结果,而搜索“狩猎”或“狗”则什么也不会产生。就好像没有“规范化”形式的单词没有存储在文本中--索引(或以一种无法找到它们的方式存储)。使用$regex运算符进行的搜索工作很好,也就是说,我能够通过搜索/狩猎/针对相关字段这样的字符串来找到文档。

我试着删除并重新创建全文索引--没有什么改变。我只能在文件中找到“正常”表格上的文字。搜索诸如“狗”或“狩猎”(甚至是“狗”或“狩猎”)这样的词不会产生任何结果。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-01 09:16:24

迈克尔,

“语言”字段(如果存在的话)允许每个文档覆盖

用来做词干的语言。我想,作为

您为MongoDB指定了一种它不识别的语言("ENG"),

它根本无法阻止这句话。正如其他人所指出的,您可以使用

language_override选项来指定MongoDB应该使用一些

用于此目的的其他字段(例如"lang")而不是默认的字段(“语言”)。

下面是一个很好的引号(关于全文索引和搜索),

与你的问题有关。这是从这本书上摘录的。

MongoDB:权威指南,第二版

用其他语言进行搜索

当插入文档(或首先创建索引)时,MongoDB会查看索引字段并将每个单词进行词干,将其简化为一个基本单元。但是,不同的语言以不同的方式阻止单词,因此必须指定索引或文档是什么语言。因此,文本类型索引允许指定"default_language“选项,该选项默认为"english”,但可以设置为许多其他语言(有关最新列表,请参见在线文档)。例如,要创建法语索引,我们可以这样说:

> db.users.ensureIndex({"profil" : "text", "interets" : "text"}, {"default_language" : "french"})

除非另有规定,否则法语将用于堵截。您可以在每个文档的基础上,通过具有描述文档语言的" language“字段来指定另一种词干语言:

> db.users.insert({"username" : "swedishChef", "profile" : "Bork de bork", language : "swedish"})

这本书没有提到的(至少这一页没有)是

可以使用language_override选项指定MongoDB

应该为此目的使用其他字段(例如"lang")和

不是默认的(“语言”)。

票数 0
EN

Stack Overflow用户

发布于 2014-04-01 01:52:06

经过大量的实验和挠头,我发现了这种行为的原因。事实证明,该集合中的文件具有“语言”属性。显然,该属性的存在和价值使得这些文档无法搜索。(这个值恰好是“ENG”。有可能将其更改为“eng”将使此文档再次可搜索。然而,这一领域的目的完全不同)。在我将字段重命名为'lang‘之后,我通过搜索“狗”或“狗”找到了包含“狗”这个词的文档。

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

票数 3
EN

Stack Overflow用户

发布于 2014-04-01 13:26:17

language_override中,在设置索引时查看http://docs.mongodb.org/manual/tutorial/specify-language-for-text-index/选项。它允许您更改应用于定义文本搜索语言的字段的名称。这样,您就可以将"language“属性留给应用程序使用,并将其称为其他东西(例如searchlang或类似的东西)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22766998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档