我有
形式的数据条目{
"id": "ABCxxx",
// Other fields
}
其中ABC
是唯一标识符,用于定义"类型"这个记录。 (例如,用户为USR1234...
,图像为IMG1234...
)
我想获得我在ES中所有不同类型记录的列表。所以本质上我想按id
进行排序,但只查看id的前三个字符。
这显然不起作用,因为它按id
排序(因此USR123
与USR456
不同):
{
"fields": ["id"],
"aggs": {
"group_by_id": {
"terms": {
"field": "id"
}
}
}
}
如何撰写此查询?
答案 0 :(得分:1)
正如 paqash 所建议的那样,可以通过脚本实现同样的效果,但我会建议另外一种存储"类型"在您的架构中完全不同的字段。
例如。
USR1234 : {id:"USR1234", type:"USR"}
IMG1234 : {id:"USR1234", type:"IMG"}
这样可以避免脚本中不必要的复杂化并保持查询界面的清洁。
答案 1 :(得分:0)
您可以使用无痛脚本语言来完成此任务。
{
"fields": ["id"],
"aggs": {
"group_by_id": {
"terms": {
"script" : {
"inline": "doc['id'].substring(0,3)",
"lang": "painless"
}
}
}
}
}
更多信息here。请注意,substring方法的语法可能不完全正确。