Elasticsearch:自动完成聚合中的可用存储桶

Elasticsearch: Autocomplete on the available buckets in an aggregation

归根结底问题是

现在的要求是能够通过 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" 开头的标签。

Link 到文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_filtering_values