【发布时间】:2014-11-26 07:56:06
【问题描述】:
我有一组包含搜索词数组的文档,例如
[ "apples", "oranges", "bananas" ]
用户将输入关键字前缀的搜索字符串,我想匹配包含数组中每个术语的所有文档。因此,例如,“app oranges”会匹配上面的列表,但“applet oranges”不会。
使用 $regex 构造一个 $and 查询来检查每个词是否匹配数组中的一项作为前缀是相当简单的,但这还远远不够......
每个关键字在集合中都应该有一个唯一的匹配项,这样搜索“apples app”就不会匹配上面的列表,因为“app”这个词不能与“apple”匹配,因为“apple”已经被匹配了。这种约束导致了一个更微妙的问题。以这一套为例:
[ "france", "fred", "freddy" ]
如果用户点击“fr France”,那么这应该匹配。重要的是,“fr”的匹配不会从剩余关键字的可能术语列表中删除“france”,否则随后对术语“france”的测试将失败。
我需要将其实现为 Mongo 查询。我对 Mongo 很陌生,我不知道从哪里开始,甚至这是可能的。可以做到吗?如果有,怎么做?
【问题讨论】:
-
如果您可以接受可能发生多个匹配的事实:阵列上的text index 怎么样?你可以按照他们达到的分数对结果进行排序,有自动词干等等。当然,它会有点模糊。由于您没有描述您的用例,因此很难判断文本索引是否符合您的需求。
标签: mongodb