如何使用MongoDB全文搜索创建自动完成功能

时间:2015-08-27 20:38:03

标签: node.js mongodb mongoose full-text-search

我想创建一个自动填充输入框,在用户输入时显示单词建议。

基本上,我的问题是当我使用$ text运算符搜索文档中的字符串时,查询只会匹配完整的词干。出于同样的原因,如果文档字段包含单词blueberry,则对术语blue的搜索将与文档不匹配。但是,搜索蓝莓或蓝莓会匹配。

find = {$text: { $search:  'blue' } };

^(与文档中的蓝莓或蓝鸟不匹配。)

我希望能够做到这一点。我想要匹配蓝莓'或者' bluebird'用' blue',最初我认为这可以通过使用'以'开头(^)正则表达式,但似乎$ text和$ search只接受一个字符串;不是正则表达式。

我想知道是否有办法实现这一点,实现/维护并不过分复杂。到目前为止,我只看到有人试图通过创建一个新集合来实现这一目标,该集合的结果是使用文本索引在集合中运行map / reduce。

我不想使用ElasticSearch或Solr,因为我认为这对我正在做的事情来说太过分了,虽然我有时候认为最终我别无选择,但我仍然无法相信没有更简单的事情。实现这一目标的方法。

1 个答案:

答案 0 :(得分:4)

MongoDB全文搜索仅匹配整个单词,因此它本身不适合自动完成。

  

$ text运算符可以搜索单词和短语。查询匹配完整的词干。例如,如果文档字段包含单词blueberry,则对术语blue的搜索将与文档不匹配。但是,对蓝莓或蓝莓的搜索将匹配。

(资料来源:http://docs.mongodb.org/manual/core/index-text/