Elasticsearch:自动完成聚合中的可用存储桶
Elasticsearch: Autocomplete on the available buckets in an aggregation
归根结底问题是
- 我有一个未分析字符串的多值字段(将它们视为
tags
)
- 我有一个聚合,它收集这些标签
现在的要求是能够通过 tags
(这是简单的部分)过滤这些聚合,并提供对可用集的前缀搜索 tags
(困难的部分)一个简洁的向下钻取功能。
如果我对 tag
的前缀(例如 "Ge")进行简单过滤
"aggregations": {
"tags": {
"filter": {
"prefix": {
"tags": "Ge"
}
},
"aggregations": {
"tags": {
"terms": {
"field": "tags"
}
}
}
}
它 returns 出现在至少一个 tag
以 "G".
开头的字段中的所有 tags
除了检索许多 tags
然后对它们进行前缀过滤 "by hand" 之外,有没有办法解决这个问题。顺便说一句,如果认为 Elasticsearch: Possible to process aggregation results? 中的脚本是不必要的。
谢谢
马库斯
您可以使用 "include" 参数过滤聚合值。作为此参数的值,您需要传递正则表达式。对于您的示例,它将是:
"aggregations": {
"tags": {
"filter": {
"prefix": {
"tags": "Ge"
}
},
"aggregations": {
"tags": {
"terms": {
"field": "tags",
"include": "Ge.*"
}
}
}
}
这应该 return 以 "Ge" 开头的标签。
归根结底问题是
- 我有一个未分析字符串的多值字段(将它们视为
tags
) - 我有一个聚合,它收集这些标签
现在的要求是能够通过 tags
(这是简单的部分)过滤这些聚合,并提供对可用集的前缀搜索 tags
(困难的部分)一个简洁的向下钻取功能。
如果我对 tag
"aggregations": {
"tags": {
"filter": {
"prefix": {
"tags": "Ge"
}
},
"aggregations": {
"tags": {
"terms": {
"field": "tags"
}
}
}
}
它 returns 出现在至少一个 tag
以 "G".
tags
除了检索许多 tags
然后对它们进行前缀过滤 "by hand" 之外,有没有办法解决这个问题。顺便说一句,如果认为 Elasticsearch: Possible to process aggregation results? 中的脚本是不必要的。
谢谢 马库斯
您可以使用 "include" 参数过滤聚合值。作为此参数的值,您需要传递正则表达式。对于您的示例,它将是:
"aggregations": {
"tags": {
"filter": {
"prefix": {
"tags": "Ge"
}
},
"aggregations": {
"tags": {
"terms": {
"field": "tags",
"include": "Ge.*"
}
}
}
}
这应该 return 以 "Ge" 开头的标签。