2013-03-26 109 views
0

如何在不使用外部引擎的情况下使用mongodb对细粒度搜索进行跟踪?就拿这个对象为例 { 流派: '喜剧', 页数:380, 年:2013年, 畅销书:真实, 作者: '李四' }这是由以下搜索使用mongodb搜索多个参数

db.books.find({ 
    pages:  { '&gt': 100 }, 
    year:  { '&gt': 2000 }, 
    bestseller: true, 
    author:  "John Doe" 
}); 

迄今为止很直截了当。现在假设文档中有更多的值,并且我正在进行更精确的搜索我有一个漂亮的集合。

我会做的第一件事就是创建索引。但是,它是如何工作的?我已经读过指数交叉点,这里定义的https://jira.mongodb.org/browse/SERVER-3071是不可行的。这意味着如果我将索引设置为“年份”和“页面”,我不会真正优化搜索中的AND操作。

那么如何优化搜索参数?

在此先感谢。

回答

0

好像你在问关于compound indexes in mongodb。复合索引允许您在文档中的多个字段上创建单个索引。通过创建复合索引,您可以在使用索引的同时完成这些大型/复杂查询。

更为一般的说明,如果您在高度选择性的字段上创建基本索引,您的搜索可能会非常快。使用你的例子,如果你有作者索引,查询引擎将使用该索引来查找作者==“John Doe”的所有条目。据推测,与特定作者有关的书籍数量与整个收藏中的书籍数量相比并不多。因此,即使您的查询的其余部分相当复杂,它也只能通过匹配作者的少数文档进行评估。因此,通过正确地构建索引,您可以获得显着的性能增益,而无需任何复杂的索引。

+0

谢谢。不过,我提供的代码只是一个例子。你知道是否有任何工具可以帮助查看频繁的查询,这可以帮助找到最佳匹配来创建索引? – 2013-03-26 20:57:27

+0

嗨,约翰,我不知道任何工具,似乎大多数人通过使用探查器来查找手动找出哪些查询运行缓慢,然后优化他们的索引这些特定的查询。 – ACE 2013-04-01 16:03:16