簡體   English   中英

在Elasticsearch中,如何使用過濾器執行嵌套求和查詢?

[英]In Elasticsearch, how do I perform a nested sum query with a filter?

我創建了一個映射如下:

PUT cars
{  
   "mappings":{  
      "_doc":{  
         "properties":{  
            "metadata":{  
               "type":"nested"
            }
         }
      }
   }
}

然后我插入一個文件:

PUT /cars/_doc/1
{  
   "metadata":[  
      {  
         "key":"price",
         "value":20000
      },
      {  
         "key":"miles",
         "value":1000
      }
   ]
}

現在我希望檢索所有價格的總和(這里只有一個文件,但我仍然認為這足以說明這一點)。

我試過了:

GET cars/_doc/_search

{
  "aggs": {
    "metadata": {
      "nested": {
        "path": "metadata"
      },
      "aggs": {
        "prices": {
          "sum": {
            "field": "metadata.value"
          }
        }
      }
    }
  }
}

但這將包括我不想要的miles

如何添加過濾器以便只在我的查詢中包含price ,即如何讓查詢返回20,000而不是21,000?

由於您只想考慮價格,所以您需要做的就是過濾key price的嵌套文檔。 為此,您需要添加過濾器聚合 ,如下所示:

{
  "aggs": {
    "metadata": {
      "nested": {
        "path": "metadata"
      },
      "aggs": {
        "price": {
          "filter": {
            "term": {
              "metadata.key": "price"
            }
          },
          "aggs": {
            "prices": {
              "sum": {
                "field": "metadata.value"
              }
            }
          }
        }
      }
    }
  }
}

暫無
暫無

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

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