簡體   English   中英

Elasticsearch按字段前綴聚合

[英]Elasticsearch aggregate by field prefix

我有以下形式的數據輸入

{
   "id": "ABCxxx",
   // Other fields
}

其中ABC是定義此記錄“類型”的唯一標識符。 (例如,用戶為USR1234... ,圖像為IMG1234...

我想獲得我在ES中擁有的所有不同類型的記錄的列表。 因此,從本質上講,我想按id進行排序,但只查看id的前三個字符。

這顯然不起作用,因為它按id排序(因此USR123USR456不同):

{
    "fields": ["id"],
    "aggs": {
        "group_by_id": {
            "terms": {
                "field": "id"
            }
        }
    }
}

如何編寫此查詢?

正如paqash所建議的那樣 ,可以通過腳本來實現相同的目的,但是我建議您將“類型”存儲為架構中不同字段的一種替代方法。

例如。

USR1234 : {id:"USR1234", type:"USR"}
IMG1234 : {id:"USR1234", type:"IMG"}

這樣可以避免腳本編寫過程中不必要的麻煩,並保持查詢界面的整潔。

您可以使用輕松的腳本語言來完成此任務。

{
    "fields": ["id"],
    "aggs": {
        "group_by_id": {
            "terms": {
                "script" : {
                    "inline": "doc['id'].substring(0,3)",
                    "lang": "painless"
                }
            }
        }
    }
}

更多信息在這里 請注意,substring方法的語法可能不完全正確。

暫無
暫無

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

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