2017-06-08 18 views
0

我用下面的終點看到的是被cloudant選擇來獲取我的結果,其指數:Cloudant查詢選擇了錯誤的指標

https://mydb.cloudant.com/mlslistings-temp/_explain 

這裏是一個例子查詢其錯誤的指數是選擇:

{ 
"sort": ["ListPrice"], 
"limit":20, 
"selector":{ 
    "Street#":"1031", 
    "MLSStatus":{"$or":[{"$eq":"Active"}]}, 
    "ListPrice":{"$gte":0}, 
    "ParcelSizeAcres":{"$gte":0,"$lte":50}} 
} 

您在查詢中看到的所有字段都是基於json的索引。 我有兩個關於索引選擇的問題:

  • 無論我將哪個字段作爲排序字段自動選擇爲所選索引。它會很好,但大多數情況下,我的查詢將是"ListPrice":{"$gte":0},因爲幾乎所有屬性的價格都大於0,所以最終會執行全表掃描。
  • 如果我刪除查詢中的所有字段,並且在查詢中僅保留Street#ParcelSizeAcres,則選擇ParcelSizeAcres作爲索引,但這是錯誤的。因爲當我使用Street#運行查詢時,總共返回53個文檔,而ParcelSizeAcres返回數百個。

這些指數的選擇似乎是逆着Cloudant's Explain Plans

回答

0

您的各項指標均保持單場。因此,就Cloudant而言,他們具有相同的權重,並且按照您提到的文檔,因此該選擇是字典排序順序中的第一個可用索引,因此在第一種情況下爲ListPrice,在第二種情況下爲ParcelSizeAcres。這似乎與記錄的行爲一致。