MongoDB全文搜索+部分单词匹配的解决方法

KIC*_*KIC 26 full-text-search mongodb

由于使用mongodb全文搜索无法通过单词"blue"找到"blueberry",我想帮助我的用户完成"blue"到"blueberry"这个词.为此,是否可以查询mongodb全文索引中的所有单词 - >我可以将这些单词用作建议,即对于typeahead.js?

Ste*_*nie 12

在文本搜索中出现的语言使用算法来尝试关联从公共基础派生的单词(例如,"运行"应该匹配"运行").这与您要为自动完成功能实现的前缀匹配(例如"蓝色"匹配"蓝莓")不同.

为了最有效地使用typeahead.jsMongoDB文本搜索,我建议关注prefetchtypeahead中的支持:

  • 创建一个keywords集合,其中包含您的集合中使用的常用单词(可能包含使用频率计数).您可以通过在您具有文本搜索索引的集合中运行Map/Reduce来创建此集合,并在添加新文档时使用定期的Incremental Map/Reduce使单词列表保持最新.

  • 让您的应用程序keywords使用唯一关键字从集合中生成JSON文档(可能仅限于基于单词频率的"热门"关键字,以使列表易于管理/相关).

然后,您可以将生成的关键字JSON用于具有typeahead prefetch功能的客户端自动完成:

$('.mysearch .typeahead').typeahead({
  name: 'mysearch',
  prefetch: '/data/keywords.json'
});
Run Code Online (Sandbox Code Playgroud)

typeahead.jsprefetch在localStorage中缓存JSON数据以进行客户端搜索.提交搜索表单后,您的应用程序可以使用服务器端MongoDB文本搜索以相关顺序返回完整结果.