如何优化ElasticSearch多个查询

时间:2016-03-24 17:52:03

标签: elasticsearch

我有一个名为user_info的索引,索引下有两种叫做user和events的类型。现在我需要向200个用户和每个用户查询10个事件。 所以我做了以下查询(sodu脚本): 用于搜索用户:

{size:200,"match:{"user_address":"CA Sf"}}

然后我向事件类型发出了200个quires: 搜索事件:

{size:10,"term":{"userid":"id1"}}
{size:10,"term":{"userid":"id2"}}
....
{size:10,"term":{"userid":"id200"}}

任何想法请优化上述查询,谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用以下查询:

{
"query": {
  "terms": {
     "userid": [
        // list of userId
     ]
  }
},
"aggs": {
  "group By user": {
     "terms": {
        "field": "userId"
     },
     "aggs": {
        "Group By event": {
           "terms": {
              "field": "event_type"
           },
           "aggs": {
              "top10": {
                 "top_hits": {
                    "size": 10
                 }
              }
           }
        }
      }
    }
  }
} 

如果为所有200个userIds运行此查询,则此查询会很慢。您最好将userIds列表分成块,然后运行上面的查询。

答案 1 :(得分:1)

查看terms个查询

类似这样的事情

{size:200, "terms" : { "userid" : ["id1", "id2", ... ,"id200"]}}