因为它是不可能通过单词“蓝色”通过使用MongoDB的全文搜索,找到“蓝莓”,我想帮助我的用户完成单词“蓝色”来“蓝莓”。为此,是否可以查询mongodb全文索引中的所有单词 - >我可以使用这些单词作为建议,即typeahead.js?MongoDB的全文搜索+解决方法部分字词匹配
回答
在文本搜索Language stemming使用一种算法来尝试涉及从一个共同的基衍生词(例如,“运行”应匹配“运行”)。这与您要为自动完成功能实现的前缀匹配(例如,“蓝色”匹配“蓝莓”)不同。
为了最有效地使用typeahead.js
用MongoDB的文本搜索,我建议着重于prefetch
支持预输入:
创建中使用的
keywords
收集它具有常用词(也许使用频率计数)的采集。您可以通过running a Map/Reduce在您拥有文本搜索索引的集合中创建此集合,并在添加新文档时使用定期Incremental Map/Reduce保持文字列表处于最新状态。您的应用程序是否使用唯一关键字(可能仅限于基于字频的“热门”关键字以保持列表可管理/相关)从
keywords
集合生成JSON文档。
然后,您可以使用客户端自动完成所产生的关键字JSON与预输入的prefetch
功能:
$('.mysearch .typeahead').typeahead({
name: 'mysearch',
prefetch: '/data/keywords.json'
});
typeahead.js
将缓存prefetch
JSON数据的localStorage的客户端搜索。当提交搜索表单时,您的应用程序可以使用服务器端MongoDB text search按相关性顺序返回完整结果。
这是我想要的更多努力有一个整洁的想法! thx – KIC
您不能查询在索引中的所有单词,但你当然可以查询原始文档的领域。搜索索引中的单词也并不总是完整的单词,但无论如何都会被阻止。所以你可能不会在索引中找到“蓝莓”,而只是“blueberri”。
不知道这是否对面临这个问题的一些新人有用。
根据您的集合的大小和多少RAM你有可用的,你可以通过$正则表达式搜索,通过建立适当的索引。 E.g:
db.collection.find({query : {$regex: /querywords/}}).sort({'criteria': -1}).limit(limit)
如下您需要的指数:
db.collection.ensureIndex({ "query": 1, "criteria" : -1 })
这可能是非常快,如果你有足够的内存。
希望这会有所帮助。
如果您不想从文本开始搜索,则索引将不会被使用。这种情况下的索引只是浪费资源。 – Skarllot
简单的解决方法我现在正在做的是打破文本保存为文本索引阵列个别字符。
然后当你做$search
查询,你只需再次打破了查询到字符。
请注意,这仅适用于短字符串,表示长度小于32,否则索引建立过程将花费很长时间,因此插入新记录时性能会显着下降。
downvote的原因? – Chen
对于那些尚未开始实施任何数据库体系结构并在此寻求解决方案的人,请参阅Elasticsearch。它是一个类似于mongodb结构的json文档驱动的数据库。它有“edge-ngram”分析器,它真的非常高效和快速地给你提供了你拼写错误的搜索的意思。您也可以部分搜索。
- 1. MongoDB和全文搜索部分字
- 2. 使用MySQL全文搜索匹配部分单词?
- 3. MySQL搜索匹配词的一部分
- 4. 为词组搜索和部分匹配搜索字段
- 5. Mongodb全文搜索匹配precesion
- 6. GAE全文搜索API词组匹配
- 7. MongoDB全文搜索 - 匹配单词和确切短语
- 8. Java的全文搜索解决方案?
- 9. PostgreSQL全文搜索中的多个同义词字典匹配
- 10. 如何使多列MySQL的全文搜索,其中部分单词匹配
- 11. Elasticsearch - 与部分搜索词匹配not_analyzed字段
- 12. mysql全文搜索搜索简单的单词,如“部分a”
- 13. Mysql部分匹配搜索算法
- 14. 部分匹配和完全匹配的多个字段的弹性搜索
- 15. 带部分匹配的mysql全文搜索
- 16. mongodb全文搜索建议多个词
- 17. MongoDB全文搜索取词开始
- 18. MongoDB全文搜索常用词
- 19. 全文搜索 - 搜索字词排序
- 20. MeteorJS - MongoDB - 为什么全文搜索只返回完全匹配?
- 21. 在sql server中寻找全文搜索的字词部分
- 22. PostgreSQL:全文搜索 - 如何搜索部分单词?
- 23. 如何使用部分匹配搜索全文?
- 24. MySQL全文搜索布尔模式部分匹配
- 25. mysql全文搜索部分匹配和报价
- 26. 如何在mongodb中搜索与名和姓的完全或部分匹配
- 27. 如何搜索字符串中的单词(完全匹配)?
- 28. 全文搜索不完全匹配
- 29. MongoDB文本搜索和词搜索的多个搜索词
- 30. 只匹配Postgres全文搜索中的一些词
我不相信这是现在,你可能能够使用查询条件,但我相信他们没有得分:http://docs.mongodb.org/manual/reference/command/text/#search -with-additional-query-conditions – Sammaye
谁说在MongoDB中不可能部分匹配字符串? http://stackoverflow.com/questions/3305561/how-to-query-mongodb-with-like –
@DenizZoeteman我不确定你是否理解这个问题,这是关于FTS不是一般查询 – Sammaye