2013-03-26 95 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