ElastaticSearch -- es之Filters aggregation 先過濾再聚合


使用場景

使用es時,有時我們需要先過濾后再聚合,但如果直接在query的filter中過濾,不止會影響到一個聚合,還會影響到其他的聚合結果。
比如,我們想要統計深圳市某個品牌的總銷售額,以及該品牌的女款衣服的銷售額。
直接filter過濾款式為女,那么就無法統計總銷售額了。
這時可以使用Filters aggregation。也就是在aggregations中先過濾后再聚合。

Filters aggregation格式


{
  "size" : 0,
  "aggregations" : {
    "自已命名的聚合名稱1" : {
      "filter" : {
        "bool" : {
          "filter" : [
            {
              "term" : {
                "查詢字段1" : {
                  "value" : 查詢值1,
                  "boost" : 1.0
                }
              }
            }
          ]
        }
      },
      "aggregations" : {
        "自已命名的聚合名稱2" : {
          "sum" : {
            "field" : "查詢值2"
          }
        }
      }
    }
  }
} 


示例如下:


{
  "size" : 0,
  "query" : {
    "bool" : {
      "filter" : [
	"term" : {
	  "area" : {
	    "value" : "深圳市",
	    "boost" : 1.0
	  }
	}
      ]
    }
  },
  "aggregations" : {
    "filterAggGirl" : {
      "filter" : {
        "bool" : {
          "filter" : [
            {
              "term" : {
                "type" : {
                  "value" : "女",
                  "boost" : 1.0
                }
              }
            }
          ]
        }
      },
      "aggregations" : {
        "aggAmount" : {
          "sum" : {
            "field" : "amount"
          }
        }
      }
    }
  }
} 

參考資料:

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-filters-aggregation.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM