如何按ElasticSearch中的字段值进行过滤?

鉴于以下ElasticSearch文档:

{
    "_id": "3330481",
    "_type": "user",
    "_source": {
        "id": "3330481",
        "following": ["1", "2", "3", ... , "15000"]
    }
}

对于给定的用户列表[“50”,“51”,“52”]我想检查ID为3330481的用户遵循哪些用户.由于她关注15000个用户,我不想获得整个列表然后在本地检查.

有没有办法只检索相关用户?

最佳答案 我不确定你是否可以从doc获取一个子数组.

但是,实现此目的的一种方法是使用嵌套字段.您可以将以下字段的架构更改为嵌套,如下所示.

 {
        "id": "3330481",
        "following": [
              {"userId":"1"}, {"userId":"2"},{"userId": "3"}, ... ]
 }

然后,您可以使用inner_hits检索数组中的匹配元素,如下所示.

{
    "query" : {
        "nested" : {
            "path" : "following",
            "query" : {
                "terms" : {"following.userId" : ["50","51","53"]}
            },
            "inner_hits" : {
                "size":0 // fetches all 
            }
        }
    }
}
点赞