返回文档不匹配数组Kibana中的所有值

cig3rfwq  于 2022-12-09  发布在  Kibana
关注(0)|答案(1)|浏览(149)

我有一堆文档的字段,如

user.userDatas.user_roles[1,2,3]
user.userDatas.user_roles[1,2,3,4,5]
user.userDatas.user_roles[1,3,4,5]

我必须确保所有的文档中都有值[1,2,3],否则返回的文档中没有三个值中的任何一个。在上面的示例中,它应该返回[1,3,4,5],因为其中缺少2。
我已经尝试过这个,但它只返回匹配的记录1,2,3,但我需要的记录没有任何这3.

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "user.userDatas.user_roles": 1
          }
        },
        {
          "term": {
            "user.userDatas.user_roles": 2
          }
        },
        {
          "term": {
            "user.userDatas.user_roles": 3
          }
        }
      ]
    }
  }
}
r3i60tvu

r3i60tvu1#

根据您的要求:

您需要所有文档都具有全部3个值,否则返回不具有这三个值中任何一个值的文档。

您可以使用must and must_not clause的组合,以达到您所需的结果。
添加包含索引数据、搜索查询和搜索结果的工作示例

索引数据:

{
    "user.userDatas.user_roles": [
        5,
        4,
        6
    ]
}

{
    "user.userDatas.user_roles": [
        1,
        2,
        6
    ]
}

{
    "user.userDatas.user_roles": [
        1,
        2,
        3
    ]
}

搜索查询:

{
    "query": {
        "bool": {
            "should": [
                {
                    "bool": {
                        "must": [
                            {
                                "term": {
                                    "user.userDatas.user_roles": 1
                                }
                            },
                            {
                                "term": {
                                    "user.userDatas.user_roles": 2
                                }
                            },
                            {
                                "term": {
                                    "user.userDatas.user_roles": 3
                                }
                            }
                        ]
                    }
                },
                 {
                    "bool": {
                        "must_not": [
                            {
                                "term": {
                                    "user.userDatas.user_roles": 1
                                }
                            },
                            {
                                "term": {
                                    "user.userDatas.user_roles": 2
                                }
                            },
                            {
                                "term": {
                                    "user.userDatas.user_roles": 3
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

搜寻结果:

"hits": [
            {
                "_index": "72974292",
                "_id": "1",
                "_score": 3.0,
                "_source": {
                    "user.userDatas.user_roles": [
                        1,
                        2,
                        3
                    ]
                }
            },
            {
                "_index": "72974292",
                "_id": "3",
                "_score": 0.0,
                "_source": {
                    "user.userDatas.user_roles": [
                        5,
                        4,
                        6
                    ]
                }
            }
        ]

相关问题