在弹性搜索版本 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 的值,因为它是文档中的数组字段,其余字段只是字符串值,因此使用了值。
我是弹性搜索的新手。使用 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 的值,因为它是文档中的数组字段,其余字段只是字符串值,因此使用了值。