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

时间:2018-06-27 09:52:44

标签: elasticsearch elasticsearch-aggregation elasticsearch-6

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

SELECT DISTINCT customer_name , customer_services, customer_visible from customers;

我有大约20万份弹性搜索文档。我想要文档中多个字段的唯一记录。这些字段是 customer_name, 客户服务,  customer_visible

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

我尝试了几次查询,但是并不能为我提供所有字段的唯一查询。 请帮助我为上述sql提供弹性搜索6.2.3等效查询。

2 个答案:

答案 0 :(得分:0)

我不是专家,但据我所知,如果您只想在一个字段上进行选择,那么您可以使用Term Aggregation

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

答案 1 :(得分:0)

下面是对我有效的等效于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的值,因为它是文档中的数组字段,其余字段只是字符串值,因此使用了值。