簡體   English   中英

如何在elasticsearch中聚合“非關鍵字”字段?

[英]How to aggregate a 'non - keyword' field in elasticsearch?

我正在嘗試編寫一個彈性搜索查詢,該查詢應列出文檔中各個字段所持有的所有不同值。當字段類型為關鍵字時,術語聚合查詢工作正常,我可以看到值列出的值但是,當我查詢不同的柑橘類水果類型時,我沒有得到任何結果,映射如下所示:

{   
    "vegetables":{
      "type": "text",
      "fields": {
         "keyword" : {
            "type" : "keyword",
            "ignore_above": 256
          }
        }
     }, 
    "fruits": {
        "properties": {
            "citrus": {
                "properties": {
                    "orange": {
                        "type": "long"
                    },
                    "lemon": {
                        "type": "long"
                    },
                    "kiwi": {
                        "type": "long"
                    }
                }
            }
        }
    }
}

而我期待的結果是:

"aggregations": {
  "distinct_citrusy_fruits"{
     "buckets" : [
       {
         "key":"oranges",
         "doc_count": 23
       },
       {
         "key":"lemon",
         "doc_count": 21
       },
       {
         "key":"kiwi",
         "doc_count": 23
       }
      ]
   }
}

當我為“vegetables”字段(這是一個關鍵字類型)創建一個術語聚合時,我能夠獲得如上所述的桶。 在這種情況下如何獲得不同的計數?此外,我沒有更改文檔格式的選項。

編輯 - 我到目前為止唯一的解決方法是調用映射api,然后在我的代碼中解析嵌套的JSON以獲取鍵值,如果有更好的解決方案,請在此處添加答案。

我認為你不能在字段名稱上查詢或運行聚合,只能在值上查詢或運行聚合。 對於水果我期望以下映射:

{
    "fruits": {
        "properties": {
            "citrus": {
                "properties": {
                    "kind": {
                        "type": "keyword"
                    },
                    "count": {
                        "type": "long"
                    }
                }
            }
        }
    }
}

也許你可以使用包含每個具有值的字段名的_field_names字段。 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-field-names-field.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM