由于使用 mongodb 全文搜索无法通过“blue”一词找到“blueberry”,因此我想帮助我的用户将“blue”一词补全为“blueberry”。为此,是否可以查询 mongodb 全文索引中的所有单词 -> 我可以使用这些单词作为建议,即用于 typeahead.js?
语言词干 http://en.wikipedia.org/wiki/Stemming在文本搜索中,使用一种算法来尝试关联源自共同基础的单词(例如,“running”应该与“run”匹配)。这与您想要实现自动完成功能的前缀匹配(例如“blue”匹配“blueberry”)不同。
为了最有效地利用typeahead.js
对于 MongoDB 文本搜索,我建议重点关注prefetch
支持提前输入:
创建一个keywords
集合,其中包含集合中使用的常用单词(可能包含使用频率计数)。您可以通过以下方式创建此集合运行 Map/Reduce http://jeff.jke.net/2010/12/09/counting-word-frequency-using-mapreduce在整个集合中,您有文本搜索索引,并使用定期更新保持单词列表最新增量Map/Reduce http://docs.mongodb.org/manual/tutorial/perform-incremental-map-reduce/添加新文档时。
让您的应用程序从以下位置生成 JSON 文档keywords
具有独特关键字的集合(可能仅限于基于词频的“流行”关键字,以保持列表的可管理性/相关性)。
然后,您可以使用生成的关键字 JSON 进行客户端自动完成和预先输入prefetch
特征:
$('.mysearch .typeahead').typeahead({
name: 'mysearch',
prefetch: '/data/keywords.json'
});
typeahead.js
将缓存prefetch
localStorage 中的 JSON 数据用于客户端搜索。当搜索表单提交后,您的应用程序可以使用服务器端MongoDB 文本搜索 http://docs.mongodb.org/manual/tutorial/search-for-text/按相关顺序返回完整结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)