2012-03-09 117 views
3

选择其中一个字符串值包含一组单词或短语的mongodb条目的最佳策略是什么?我正在考虑一些等价于MySQL的LIKE函数的东西,例如MongoDB - 搜索文本

WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %") 

我见过涉及令牌化的字符串选项,但是这将涉及所有文字建筑物unigram进行,这将是巨大的没有?

回答

3

的MongoDB没有全文搜索功能现在,但它很容易使用像SOLR这样的外部搜索引擎。

我强烈建议您尝试使用正则表达式或词干等重新构建文本搜索。你应该专注于你的应用程序自己的功能:)

我使用这种组合:Mongoid,SunspotMongoid-Sunspot。它在生产中运行良好,开发设置非常简单。

+0

+1对此 - 我也建议对此进行投票(它已经是2号,但所有选票都有帮助):https://jira.mongodb.org/browse/SERVER-380 – 2012-03-09 10:55:51

1

您可以在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' } }); 
0

不知何故MongoDB中内置的文本搜索失败以满足我对使用复合索引的现有数据库的要求。我现在使用mongoose-search-plugin,它一直非常好地工作。它使用自然词根和距离算法来返回相关性分数。

User.search('Malaysia Car Food',{username:1},{}, function(err, u){ 
    console.log('Search Results: '+JSON.stringify(u)); 
});