MongoDB索引大文本字段似乎没有使查询更快?

时间:2012-04-03 14:29:06

标签: mongodb indexing

我有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。

我在这里做错了吗?为什么在对文本数据编制索引后查询时间没有减少?

3 个答案:

答案 0 :(得分:2)

检查索引和正则表达式查询的文档:

http://www.mongodb.org/display/DOCS/Advanced+Queries

  

对于简单的前缀查询(也称为rooted regexps),例如/ ^ prefix /,   数据库将在可用且适当时使用索引(很多   像大多数使用LIKE'前缀%'索引的SQL数据库   表达)。这只适用于没有i(不区分大小写)的情况   在旗帜中。

答案 1 :(得分:1)

全文搜索是MongoDb不适合的专用区域。

如果你正在寻找开源的东西和快,你应该尝试Apache SOLR。我们已经使用它已经4年了,非常有价值!

http://lucene.apache.org/solr/

答案 2 :(得分:0)

您需要在该字段上创建TEXT搜索索引。

 db.documents.ensureIndex({ body: "text" });

创建TEXT搜索索引后,您可以按以下方式搜索:

 db.documents.find({ "$text": {"$search" : /test/i} });