如何在弹性搜索中结合多字段的区别

时间:2015-11-20 10:53:11

标签: mysql elasticsearch

例如,我在那里有六个文件:

    1. {“task_id”:1,“frame”:1,“job_id”:1},
    1. {“task_id”:1,“frame”:1,“job_id”:1},
    1. {“task_id”:1,“frame”:1,“job_id”:3},
    1. {“task_id”:2,“frame”:1,“job_id”:2},
    1. {“task_id”:2,“frame”:1,“job_id”:3},
    1. {“task_id”:3,“frame”:1,“job_id”:3},

我想获得具有相同task_id的文档计数。

期望结果必须是(关键是“task_id”)

[
  {"key": 1, "doc_count": 2},  
  {"key": 2,  "doc_count":2},  
  {"key": 3, "doc_count":1}
]

注意:第一个文档和第二个文档的所有值都相同,所以它只计算一次。

那么如何在elasticsearch中编写查询?我可以在SQL中轻松编写它,但我在Elasticsearch中感到困惑。

我的mysql查询

select tmp.task_id, count(*) from (select distinct task_id,frame,job_id from mytable) as tmp group by tmp.task_id

1 个答案:

答案 0 :(得分:1)

您想在task_id + frame + job_id字段{使用script)上使用terms aggregation,您将获得{ {1}}你期待。

doc_count

请注意,要运行此功能,您需要enable dynamic scripting