gpt4 book ai didi

elasticsearch - 对可选字段不存在的Elasticsearch查询

转载 作者:行者123 更新时间:2023-12-03 01:45:32 29 4
gpt4 key购买 nike

我有一个简单的对象的 flex 索引,该对象具有两个字段:

{
"content": "something",
"acl": ["andrey", "gilles"]
}
acl字段是用户名数组或值“public”,或者它可能根本不存在于对象中。我想编写一个查询,为我提供 acl=testuser或不存在的所有对象。这是我的查询:
{
"query": {
"bool": {
"should": [
{
"bool" : {
"must": [
{"exists" : { "field" : "acl" }},
{"match" : {"acl":"testuser"}}
]
},
"bool": {
"must_not": [
"exists": {
"field": "acl"
}
]
}
}
]
}
}
}

但是当我执行它时,我得到一个错误:
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 12,
"col": 11
}
],
"type": "parsing_exception",
"reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 12,
"col": 11
},
"status": 400
}

有什么想法我做错了吗?

最佳答案

您的JSON无效:

  • 您在bool查询
  • 中设置了两次字段 should
  • must_not是一个数组,您没有为新对象
  • 添加花括号

    此外,您不需要 exist查询与 match查询一起匹配。因此,您只需要在 match内保留 must_not查询和 exist should查询,如下所示:
    {
    "query": {
    "bool": {
    "should": [
    {
    "bool": {
    "must_not": [
    {
    "exists": {
    "field": "acl"
    }
    }
    ]
    }
    },
    {
    "match": {
    "acl": "testuser"
    }
    }
    ]
    }
    }
    }

    关于elasticsearch - 对可选字段不存在的Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44335968/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com