elasticsearch - 字段值汇总(正则表达式)

标签 elasticsearch

我正在尝试执行汇总,以按特定字段值的前两个字母对文档进行分组。

我成功通过特定的字段名称将文档合并在一起,但是我不知道如何使用这些值。

例如,对于文档:

[
  {
    "name": "John"
  },
  {
    "name": "Jog"
  },
  {
    "name": "James"
  },
  {
    "name": "Robert"
  },
  {
    "name": "Jessica"
  }
]

我想得到以下回应:
[
  {
    "key": "Jo",
    "doc_count": 2 
  },
  {
    "key": "Ja",
    "doc_count": 1
  },
  {
    "key": "Ro",
    "doc_count": 1
  },
  {
    "key": "Je",
    "doc_count": 1
  }
]

有聚合查询能够做到这一点吗?

最佳答案

您可以将terms聚合与脚本而不是字段一起使用,如下所示:

{
  "size": 0,
  "aggs": {
    "first_two": {
      "terms": {
        "script": "doc.name.value?.size() >=2 ? doc.name.value?.substring(0, 2) : doc.name.value"
      }
    }
  }
}

请注意,如果您的name字段均至少包含两个字符,则脚本可以只是doc.name.value?.substring(0, 2)。我上面的脚本说明了单个字符的名称。

还请确保enable dynamic scripting才能正常工作。

关于elasticsearch - 字段值汇总(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044782/

相关文章:

elasticsearch - ElasticSearch 2.4日期范围直方图,使用两个日期字段之间的差异

elasticsearch - Elastic Search v6.3:带过滤器的查询从不返回任何匹配项

elasticsearch - 在索引类型的映射中更改属性的类型

elasticsearch - 将部分IP与Elasticsearch匹配

elasticsearch - 在Elasticsearch中是否可以按地理形状类型进行搜索

java - Elasticsearch 和 luke

elasticsearch - 登录后的AWS kibana抛出缺少角色错误

text - 将 ElasticSearch 与 Hadoop Map Reduce 结合使用

java - 如何减少 Elasticsearch 滚动响应时间?

ElasticSearch 和 Nest : Why am I missing the id field on a query?