使用嵌套字段

时间:2016-08-16 13:04:00

标签: php elasticsearch laravel-5 elasticsearch-2.0

我有两个指数:

首先,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]"

当一个索引具有嵌套字段但另一个索引没有?

时,如何在没有错误的情况下进行搜索

1 个答案:

答案 0 :(得分:1)

我认为您需要使用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"
            }
          }
        }
      ]
    }
  }
}