使用嵌套字段进行多索引搜索

Multi indices search with nested fields

我有两个索引:

首先,questions,有嵌套字段answers。二、articles没有这个字段

我尝试通过多个索引进行搜索:

{
    "index": "questions, articles",
    "body":{
        "query":{
            "bool":{
                "must":{
                    "nested":{
                        "path": "answer",
                        ...
                    }
                }
            }
        }
    }
}

并得到错误 "query_parsing_exception: [nested] failed to find nested object under path [answer]"

当一个索引有嵌套字段而另一个索引没有时,我如何才能不出错地进行搜索?

我认为您需要使用 indices query 并对每个索引使用不同的查询。像这样:

GET /questions,articles/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "indices": {
                  "indices": [
                    "questions"
                  ],
                  "query": {
                    "nested": {
                      "path": "answer",
                      "query": {
                        "term": {
                          "text": "bla"
                        }
                      }
                    }
                  }
                }
              },
              {
                "match_all": {}
              }
            ]
          }
        },
        {
          "term": {
            "some_common_field": {
              "value": "whatever"
            }
          }
        }
      ]
    }
  }
}