选择字符串值包含一组单词或短语的 mongodb 条目的最佳策略是什么?我正在考虑与mysql的LIKE函数等效的东西,例如
WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %")
我见过涉及对字符串进行标记的选项,但这将涉及为所有文本构建一元组,这将是巨大的,不是吗?
选择字符串值包含一组单词或短语的 mongodb 条目的最佳策略是什么?我正在考虑与mysql的LIKE函数等效的东西,例如
WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %")
我见过涉及对字符串进行标记的选项,但这将涉及为所有文本构建一元组,这将是巨大的,不是吗?
Mongo 现在从 2.4 开始支持文本搜索。我的经历非常积极
http://docs.mongodb.org/manual/applications/text-search/
您在启用 setParameter 文本搜索的情况下启动服务器然后启用集合上的索引然后使用 runCommand 进行搜索
MongoDB目前没有全文搜索能力,但是使用SOLR等外部搜索引擎很容易。
我强烈不鼓励您尝试自己使用正则表达式或词干等重建文本搜索。您应该专注于您的应用程序自身的功能:)
我正在使用这种组合:Mongoid、Sunspot和Mongoid-Sunspot。它在生产中运行良好,并且开发设置很容易。
您可以在 MongoDB 查询中使用正则表达式支持。更多详情可@以下链接
http://docs.mongodb.org/manual/reference/operator/regex/
如果上述链接将来再次移动,这里有两个示例:
db.collection.find( { field: /acme.*corp/i } );
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );
不知何故,MongoDB 内置的文本搜索无法满足我对使用复合索引的现有数据库的要求。我现在正在使用mongoose-search-plugin,它运行得非常好。它使用自然词干和距离算法来返回相关性分数。
User.search('Malaysia Car Food',{username:1},{}, function(err, u){
console.log('Search Results: '+JSON.stringify(u));
});