2012-07-20 55 views
1

可能重复:
Full-text search in NoSQL databases建立一个关键字查询

我有点新的数据库查询,我想知道什么是最好的方式做,这将是。我有一个文章数据库,并希望我的用户能够通过关键字搜索它们,即允许他们键入一个字符串,并且查询将选择包含该字符串的所有标题。

最有效的方法是什么? 如果我想避免选择“the”或“it”等字符串?

我在使用mongoid以防万一。

在此先感谢

+0

您追踪的搜索特征(按关键字搜索,忽略停用词,..)与[全文搜索]有关(http://www.mongodb.org/display/DOCS/Full+Text+Search+ in + Mongo),它在MongoDB 2.0中不是内置的服务器功能(虽然已被[请求])(https://jira.mongodb.org/browse/SERVER-380)。 – Stennie 2012-07-20 13:46:25

+0

您可以实现一种标签形式的表单,但是还有更强大的搜索引擎产品,比如Solr和ElasticSearch。以前有几个关于SO的讨论,比如[NoSQL数据库中的全文搜索](http://stackoverflow.com/questions/5453872/full-text -search-in-nosql-databases) – Stennie 2012-07-20 13:46:34

回答

1

如果你的标题被存储为可以使用MongoDB的通过所支持的正则表达式搜索的字符串。例如:

db.articles.find({ title : /acme.*corp/i }); 

Mongodb使用PCRE进行正则表达式。要排除搜索中的某些词语,我会推荐使用应用程序侧检查,或者您可以使用$nin运算符。欲了解更多信息,看看here

+1

语法正确,但该示例不会有效地使用索引。请参见[Regular Expressions]上的注释(http://www.mongodb.org/display/DOCS/高级+查询#AdvancedQueries-RegularExpressions)..特别使用不区分大小写的'/ i'和出现在字符串中任何位置的匹配项。 – Stennie 2012-07-20 13:38:49

+0

是的,这就是为什么我会标题化标题,但最终它是一个设计决定...... – golja 2012-07-21 03:13:23

+0

作为设计决定,指出一些明显的考虑因素是有帮助的。例如,如果关键字搜索是应用程序的常见用例,那么对每个查询进行完整索引扫描将是糟糕的实现选择。想象一下,使用AJAX自动完成搜索的方式,每次击键都会触发新的搜索;现在添加数百万个文件到您的收藏。像标记到[搜索标签](http://www.mongodb.org/display/DOCS/Multikeys)这样的方法将会是一种更好的设计,但仍然比使用词干和停用词的全文搜索更有限。 – Stennie 2012-07-21 12:33:49