[英]Elasticsearch aggregate by field prefix
我有以下形式的數據輸入
{
"id": "ABCxxx",
// Other fields
}
其中ABC
是定義此記錄“類型”的唯一標識符。 (例如,用戶為USR1234...
,圖像為IMG1234...
)
我想獲得我在ES中擁有的所有不同類型的記錄的列表。 因此,從本質上講,我想按id
進行排序,但只查看id
的前三個字符。
這顯然不起作用,因為它按id
排序(因此USR123
與USR456
不同):
{
"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.