我有150万条记录,每条记录都有一个文本字段" body"那里包含很多文字。我使用正则表达式对这些文档执行全文搜索,但未发现索引数据与不对其编制索引之间的查询时间有任何差异。
我确保"身体上有一个索引"现场通过
db.documents.ensureIndex({ body: 1 });
MongoDB花了一些时间来索引数据,当我运行时
db.documents.getIndexes()
它表明我有一个关于集合"" body"的索引。领域。但是在索引之前和之后查询仍然需要相同的时间。
如果我运行查询
db.documents.find({ body: /test/i });
我希望它运行得更快,因为数据已编入索引。当我做的时候
db.documents.find({ body: /test/i }).explain();
mongo告诉我它在体域使用了BTreeCursor。
我在这里做错了吗?为什么在对文本数据编制索引后查询时间没有减少?
答案 0 :(得分:2)
检查索引和正则表达式查询的文档:
http://www.mongodb.org/display/DOCS/Advanced+Queries
对于简单的前缀查询(也称为rooted regexps),例如/ ^ prefix /, 数据库将在可用且适当时使用索引(很多 像大多数使用LIKE'前缀%'索引的SQL数据库 表达)。这只适用于没有i(不区分大小写)的情况 在旗帜中。
答案 1 :(得分:1)
全文搜索是MongoDb不适合的专用区域。
如果你正在寻找开源的东西和快,你应该尝试Apache SOLR。我们已经使用它已经4年了,非常有价值!
答案 2 :(得分:0)
您需要在该字段上创建TEXT搜索索引。
db.documents.ensureIndex({ body: "text" });
创建TEXT搜索索引后,您可以按以下方式搜索:
db.documents.find({ "$text": {"$search" : /test/i} });