2017-04-07 60 views
1

我有一個集合,其中文檔具有不同類型的屬性,如字符串,數字,日期時間。DocumentDb中文檔的同一字段上不同類型的索引

而且索引政策我就像是以下幾點:

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Hash", 
      "dataType": "String", 
      "precision": 3 
     } 
     ] 
    } 
    ], 
    "excludedPaths": [] 
} 

現在我想要的東西,是對字符串字段添加範圍類型的索引以及。 所以我編輯我的索引策略,如:

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Hash", 
      "dataType": "String", 
      "precision": 3 
     }, 
     { 
      "kind": "Range", 
      "dataType": "String", 
      "precision": 20 
     } 
     ] 
    } 
    ], 
    "excludedPaths": [] 
} 

但它沒有工作:(

我知道可以在現場添加多種類型的索引任何人都可以有任何想法如何做到這一點

+0

''它沒有工作''你想做範圍查詢或排序查詢?你能告訴我們什麼沒有用嗎? –

+0

我需要按順序執行,這就是爲什麼我在字符串中添加了Range類型索引的原因。但是這個甚至沒有被Azure服務器驗證。當我將其作爲索引策略提交時,它顯示錯誤。 @ FredHan-MSFT –

回答

1

對於給定的數據類型,對於指定的路徑,只能有一種索引類型(哈希或範圍),並且根據所支持的查詢,範圍是哈希的超集Hash只支持相等查詢,但範圍支持平等,範圍和查詢順序。

因此,您只需要移除字符串上哈希的JSON塊,例如像下面這樣,索引策略更新將成功:

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Range", 
      "dataType": "String", 
      "precision": 20 
     } 
     ] 
    } 
], 
    "excludedPaths": [] 
} 
+0

我知道它的作品。但問題是:在Range索引中的相等性不像Hash索引那樣快。這就是我試圖添加Range和Hash類型索引的原因。 –

+0

Range的問題在於ARRAY_CONTAINS不再使用索引!你有沒有找到解決方法? –

相關問題