我想创建一个自动填充输入框,在用户输入时显示单词建议。
基本上,我的问题是当我使用$ text运算符搜索文档中的字符串时,查询只会匹配完整的词干。出于同样的原因,如果文档字段包含单词blueberry,则对术语blue的搜索将与文档不匹配。但是,搜索蓝莓或蓝莓会匹配。
find = {$text: { $search: 'blue' } };
^(与文档中的蓝莓或蓝鸟不匹配。)
我希望能够做到这一点。我想要匹配蓝莓'或者' bluebird'用' blue',最初我认为这可以通过使用'以'开头(^)正则表达式,但似乎$ text和$ search只接受一个字符串;不是正则表达式。
我想知道是否有办法实现这一点,实现/维护并不过分复杂。到目前为止,我只看到有人试图通过创建一个新集合来实现这一目标,该集合的结果是使用文本索引在集合中运行map / reduce。
我不想使用ElasticSearch或Solr,因为我认为这对我正在做的事情来说太过分了,虽然我有时候认为最终我别无选择,但我仍然无法相信没有更简单的事情。实现这一目标的方法。
答案 0 :(得分:4)
MongoDB全文搜索仅匹配整个单词,因此它本身不适合自动完成。
$ text运算符可以搜索单词和短语。查询匹配完整的词干。例如,如果文档字段包含单词blueberry,则对术语blue的搜索将与文档不匹配。但是,对蓝莓或蓝莓的搜索将匹配。