我正在尝试使用mongodb全文搜索来显示用户正在键入的建议。 我已经完成了创建文本索引所需的所有必要步骤,并在数据库上启用了全文搜索功能,除了结果的精确度外,一切正常。
我正在使用regexp来实现相同的逻辑,例如当用户输入'blue'时,有一个建议包含'bluetooth',类似于'blue *',但使用mongos全文搜索我只得到一个结果当我输入'bluetoot'时。
我已经尝试过使用“完全匹配的字符”,“蓝色”以及我能想到的其他任何可以想象的组合但是徒劳无功。
所以我的问题是,是否有办法在mongo中实现这个? 如果mongo支持regexp中使用的*字符之类的东西,或者使用的算法尝试与单词完全匹配?
的问候, 马克西莫斯
答案 0 :(得分:8)
目前,MongoDB的文本搜索不支持搜索部分单词。该命令匹配完整的词干 - 很可能'bluetooth'和'bluetoot'源于相同的根,这就是为什么搜索词工作而'blue'不工作的原因。 (Source.)MongoDB的文本搜索使用开源词干分析器Snowball。
如果你仍然对实现自动完成感兴趣,使用regexp或外部自动完成库(也许是Typeahead.js?)可能是你最好的选择。例如,如果您想建议文章标题,可以每隔几天将标题缓存到一个json文件,并将该json数据传递给Typeahead.js。