【问题标题】:How can I create an autocomplete with MongoDB full text search如何使用 MongoDB 全文搜索创建自动完成
【发布时间】:2015-08-27 20:38:02
【问题描述】:

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

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

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

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

我希望能够做到这一点。我想将'blueberry'或'bluebird'与'blue'匹配,最初我认为这可以通过使用'starts with'(^)正则表达式来实现,但似乎$text和$search只接受一个字符串;不是正则表达式。

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

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

【问题讨论】:

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


【解决方案1】:

MongoDB全文搜索只匹配整个单词,所以天生不适合自动补全。

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

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

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2015-07-20
    • 1970-01-01
    • 2018-05-30
    • 2022-10-24
    • 2012-11-05
    • 2015-07-05
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多