簡體   English   中英

Elasticsearch - 計算有多少記錄具有特定字段值,用於多個字段

[英]Elasticsearch - Count how many records have specific field values, for multiple fields

我有一個包含如下文檔的 elasticsearch 索引:

{"id": 1, "red": true, "green": true, "blue": true }
{"id": 2, "red": false, "green": false, "blue": true }
{"id": 3, "red": false, "green": true }
{"id": 4, "red": true, "green": true, "blue": false }

對於每個顏色屬性,我想計算我有多少真實。 新的 colors 隨時可能出現。 本質上,我需要某種形式的 output:

red: 2
green: 3
blue: 2

我怎樣才能在一個查詢中得到它,最好是使用 DSL 或 SQL 查詢?

如果我可以將其轉化為每天的數據轉換/匯總,則可以加分。

您可以使用 Bucket 聚合

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html

像這樣:

獲取 /my-index-000001/_search

{
"aggs": {
    "red": {
      "terms": {
        "field": "red"
      }
    },
    "green": {
      "terms": {
        "field": "green"
      }
    },
    "blue":{ 
      "terms": {
        "field": "green"
      }
    }
  }
}

也可以使用 SQL 來完成,如下所示:

select sum(red::int) as red
     , sum(green::int) as green
     , sum(blue::int) as blue
from my_index

不完全確定在這種情況下如何處理 NULL(未測試),但它至少適用於非空值。

暫無
暫無

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

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