在弹性搜索版本 6.2.3 中获取多个字段的唯一记录

Fetch unique records for multiple fields in elastic search version 6.2.3

我是弹性搜索的新手。使用 6.2.3 版本的弹性搜索。 我想要弹性搜索等同于以下 SQL 查询:

SELECT DISTINCT customer_name , customer_services, customer_visible from customers;

我在弹性搜索中有大约 20 万个文档。我想要文档中多个字段的唯一记录。那些字段是 customer_name , customer_services, customer_visible

我不是在寻找计数,我想获取指定字段的数据,每个字段都没有重复数据。

我尝试了几个查询,但它并没有给我所有领域的唯一性。 请帮我提供上面 sql.

的弹性搜索 6.2.3 等效查询

我不是专家,但据我所知,如果你只想在一个字段上做一个 select distinct,那么你可以使用 Term Aggregation

但是看看这个Post,Elasticsearch 不支持多个字段的术语聚合,因为它不会有很好的性能。您可以查看同一 link 中建议的关于在术语聚合中使用 script 的解决方案。

下面是对我有效的 ES 6.3 等效查询。

{
  "size": 0,
  "aggs": {
    "company_details": {
      "terms": {
        "size": 10000,
        "script": "doc['customer_global_cust_id'].value + ' | ' + doc['customer_name'].value + ' | ' + doc['customer_visible'].value + ' | ' +doc['customer_services'].values"
      }
    }
  }
}

上面,我使用了 customer_services 的值,因为它是文档中的数组字段,其余字段只是字符串值,因此使用了值。