这个文本搜索是否可用MongoDB(乱码=英文单词)

时间:2012-10-30 13:21:29

标签: mongodb mongodb-query

我正在寻找如何使用这个条件或参数在Mongodb上构建查询的方法。

例如,输入文本为“rtab”,将导致“brats”,“bart”等。

我不知道这个搜索方法的术语,如果有的话,我希望你能帮助我。

3 个答案:

答案 0 :(得分:2)

它本身并不受支持,但你可以通过构建一个索引来获得这一点,该索引接受输入词“brats”和“brats”,对它们进行排序,使它们变成“abrst”和“abrs”,并构建一个由:

stem: "abrst", matches: ["brats"]
stem: "abrt",  matches: ["brat", "bart"]

然后,在搜索“brat”时,对其中的字母进行排序,以便获得“abrt”,然后执行搜索:

db.lookups.find({stem: /^abrt/})

返回的所有文档都应包含以输入词开头的单词。这应该有效,尽管它相当简陋。像Solr索引器这样的特殊搜索引擎可能会做得更好。

答案 1 :(得分:0)

我不认为使用MongoDB查询语言的传统语法可以实现这一点。唯一可行的方法是使用$ where参数。此参数采用Javascript函数,该函数对集合中的每个文档执行(作为“this”变量),并根据查询是否应返回它返回true或false。

此功能记录在此处:http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-%7B%7B%24where%7D%7DClausesandFunctionsinQueries

请注意$ where非常非常慢。当性能是您的用例的要求时,我不认为您可以使用MongoDB执行此操作。

安全警告:当这是应用程序的一部分时,您必须从用户提供的字符串中按程序生成Javascript代码。你必须小心,他不允许用户注入任何脚本代码。

答案 2 :(得分:0)

你遇到的最大问题是误导你的话。

阻止这些词语无法修复它。词干只会将“树”转换为“树”等。没有语言库(可靠的)可以为您解决此问题。

这实际上是搜索科技中黑点的一部分。 Google在其应用程序(电子邮件等)中使用从各种来源收集的单词的搜索索引来形成字典,以便在自动完成模式下(希望)在搜索框中为您提供正确的拼写,但是除非搜索,否则他们不会自动更正您的单词术语很像一个更流行的短语。

Mongo中没有任何功能,无论是通过$where还是MR,还是基于数组的单词都允许这样做。

您可以通过以下方式解决此问题:单词abrt类似于bart,因此您可以列出单词列表并查询另一个索引,对于类似单词的列表(例如geoNear type word command)搜索相似但不完全的结果。这基本上复制了其他人如何做到这一点,它不是一门精确的科学,但应该在大多数时候都有效。

通过对单词进行排序来解决这个问题的主要问题是,有时会有数百种拼写错误组合,因此可能无法很好地扩展。

至于使用Mongo进行全文搜索,此链接非常有用:http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo并详细说明了您需要做的事情。