0

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

例如,输入文本是“rtab”,会产生“brats”、“bart”等。

我不知道这种搜索方法的术语是否有任何我希望你能帮助我。

4

3 回答 3

2

它本身不是受支持的,但您可以通过构建一个索引来实现这一点,该索引采用输入词“brats”和“brats”,对它们进行排序,使它们成为“abrst”和“abrs”,并构建一个包含以下内容的查找索引:

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

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

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

返回的所有文档都应包含以您输入的单词开头的单词。这应该工作,虽然它是相当基本的。像 Solr 索引器这样的基于特殊的搜索引擎可能会做得更好。

于 2012-10-30T13:34:18.240 回答
0

您在这里遇到的最大问题是您的单词拼写错误。

词干不会解决它。词干只会将“树”转换为“树”等。没有语言库(可靠的)可以为您解决这个问题。

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

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

您可以通过以下方式解决此问题:该单词abrt类似于bart您放置单词列表并在另一个索引上查询类似单词的列表(例如 geoNear 类型的单词命令)以搜索相似但不准确的结果. 这基本上复制了其他人的做法,它不是一门精确的科学,但在大多数情况下都应该有效。

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

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

于 2012-10-30T14:18:37.117 回答
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 代码。你必须小心他不允许用户注入任何脚本代码。

于 2012-10-30T13:33:11.907 回答