2016-11-28 97 views
1

我試圖按照Elasticsearch aggregation on distinct keys中所描述的在ES 5中的字段名稱進行聚合但是在那裏描述的解決方案已經不再適用了。在elasticsearch上聚合_field_names 5

我的目標是獲取所有文檔中的密鑰。映射是默認的映射。

數據:

PUT products/product/1 
{ 
    "param": { 
     "field1": "data", 
     "field2": "data2" 
    } 
} 

查詢:

GET _search 
{ 
    "aggs": { 
     "params": { 
      "terms": { 
       "field": "_field_names", 
       "include" : "param.*", 
       "size": 0 
      } 

     } 
    } 
} 

我獲得以下錯誤:Fielddata is not supported on field [_field_names] of type [_field_names]

回答

0

這可能是因爲在ES 5 setting size: 0 is not allowed anymore你現在就設定一個特定的大小。

POST _search 
{ 
    "aggs": { 
     "params": { 
      "terms": { 
       "field": "_field_names", 
       "include" : "param.*", 
       "size": 100    <--- change this 
      } 

     } 
    } 
} 
+0

好點!可悲的是,它沒有解決這個問題。 –

+0

你得到一個錯誤或只是沒有結果? – Val

+0

啊,對不起。錯誤是:Fieldfield不支持[_field_names]類型的字段[_field_names]' –

0

環顧四周後,它似乎是在ES的唯一辦法> 5.X,以獲得獨特的字段名是通過映射端點,既然不能總在_field_names您可能需要稍微改變你的數據格式,因爲無論嵌套如何,映射端點都會返回每個字段。

我個人的問題是獲得各種兒童/父母文件的唯一密鑰。

我發現如果您在點擊映射端點時以prefix.field的格式爲字段名稱加前綴,它會自動爲您嵌套信息。

PUT products/product/1 
{ 
    "param.field1": "data", 
    "param.field2": "data2", 
    "other.field3": "data3" 
} 

GET products/product/_mapping 
{ 
    "products": { 
     "mappings": { 
      "product": { 
       "properties": { 
        "other": { 
         "properties": { 
          "field3": { 
           "type": "text", 
           "fields": { 
            "keyword": { 
             "type": "keyword", 
             "ignore_above": 256 
            } 
           } 
          } 
         } 
        }, 
        "param": { 
         "properties": { 
          "field1": { 
           "type": "text", 
           "fields": { 
            "keyword": { 
             "type": "keyword", 
             "ignore_above": 256 
            } 
           } 
          }, 
          "field2": { 
           "type": "text", 
           "fields": { 
            "keyword": { 
             "type": "keyword", 
             "ignore_above": 256 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

然後,您可以根據前綴獲取唯一字段。