如何在不使用外部引擎的情况下使用mongodb进行细粒度搜索?以此对象为例 { 类型:'喜剧', 页数:380, 年:2013年, 畅销书:是的, 作者:' John Doe' }
正在搜索以下内容:
db.books.find({
pages: { '>': 100 },
year: { '>': 2000 },
bestseller: true,
author: "John Doe"
});
到目前为止非常简单。现在假设文档中有更多的值,并且我正在进行更精确的搜索和我有一个非常大集合。
我要做的第一件事就是创建索引。但是,它是如何工作的?我已经读过这里https://jira.mongodb.org/browse/SERVER-3071中定义的索引交集是不可行的。这意味着如果我将索引设置为" year"和"页面"我不会真正优化搜索中的AND操作。
那么如何针对包含许多参数优化搜索?
提前致谢。
答案 0 :(得分:0)
好像你问的是compound indexes in mongodb。复合索引允许您在文档中的多个字段上创建单个索引。通过创建复合索引,您可以在仍使用索引的同时进行这些大型/复杂查询。
更一般地说,如果您在具有高度选择性的字段上创建基本索引,则搜索最终会非常快。使用您的示例,如果您有作者索引,查询引擎将使用该索引查找author ==" John Doe"的所有条目。据推测,与整个系列中的书籍数量相比,该特定作者的书籍并不多。因此,即使您的查询的其余部分相当复杂,也只能使用匹配作者对这些少数文档进行评估。因此,通过正确构建索引,您可以获得显着的性能提升,而无需拥有任何复杂的索引。