我有一个名为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"}}
任何想法请优化上述查询,谢谢!
答案 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"]}}