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



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

SELECT DISTINCT customer_name , customer_services, customer_visible from customers;

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

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

我尝试了一些查询,但它并没有让我在所有领域都是独一无二的。 请帮助我为上述 sql 提供弹性搜索 6.2.3 等效查询。

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

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

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

最新更新