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



我有150万条记录,每条记录都有一个包含大量文本的文本字段"body"。我正在使用正则表达式对这些文档进行全文搜索,但没有注意到索引数据和不索引数据之间的查询时间有任何差异

我通过确保"身体"字段上有一个索引

db.documents.ensureIndex({ body: 1 });

MongoDB花了一些时间对数据进行索引,当我运行时

db.documents.getIndexes()

它显示我有一个关于该系列"身体"字段的索引。但是查询在索引前后仍然需要相同的时间。

如果我运行查询

db.documents.find({ body: /test/i });

我希望它运行得更快,因为数据是索引的。当我做时

db.documents.find({ body: /test/i }).explain();

mongo告诉我它在body字段上使用BTreeCursor。

我是不是做错了什么?为什么在对文本数据进行索引后,查询时间不会减少?

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

http://www.mongodb.org/display/DOCS/Advanced+查询

对于像/^prefix/这样的简单前缀查询(也称为根regexp),数据库将在可用且适当的情况下使用索引(很多像大多数使用like"前缀%"索引的SQL数据库一样表达式)。只有当你没有i(不区分大小写)时,这才有效在旗帜中。

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

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

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

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

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

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

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

最新更新