ElasticSearch-如何从动态字段元数据查询查询?

时间:2019-07-14 19:28:39

标签: elasticsearch nosql

ElasticSearch-如何从动态字段元数据查询查询?

元数据字段是动态的,可能有是或没有内部字段。

即使其中一些未定义“已删除”字段,如何返回查询?

感谢您的收听。

{
    "query": {
        "nested": {
            "path": "metadata",
            "query": {
                "bool": {
                    "should":[
                        {
                            "match":{
                                "metadata.deleted": true
                            }
                        }
                    ]
                }
            }
        },
        "bool": {
            "must": {
                "term": {
                    "on_behalf_of": "b71457f731d8a6f"
                }
            }
        }
    }
}

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "[nested] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
                "line": 1,
                "col": 116
            }
        ],
        "type": "parsing_exception",
        "reason": "[nested] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line": 1,
        "col": 116
    },
    "status": 400
}

1 个答案:

答案 0 :(得分:1)

您的查询格式不正确。您在此处nestedbool使用两个查询。这两个查询都必须包装在布尔查询的mustshouldfilter中。假设这两个条件都是匹配所必需的,则这两个查询都应包装在must查询的filterbool子句中,如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "metadata",
            "query": {
              "bool": {
                "should": [
                  {
                    "match": {
                      "metadata.deleted": true
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "must": {
            "term": {
              "on_behalf_of": "b71457f731d8a6f"
            }
          }
        }
      ]
    }
  }
}