多级嵌套查询 - RequestError异常400 - 无法创建查询

时间:2016-12-30 16:59:51

标签: elasticsearch elasticsearch-5

我正在使用Elasticsearch 5.1.1。在执行嵌套查询时,它返回400错误

我的文档看起来像这样

{
"_index" : "test",
"_type" : "test_five",
"_source" : {
  "doc" : {
    "keyword_elas" : "elasticsearch",
    }
  },
  "doc_as_upsert" : true }

这是我的查询代码

 {
"query": {
    "nested": {
        "path":"_source",
        "query": {
            "nested": {
                "path": "_source.doc",
                "query": {
                    "match": {
                        "_source.doc.keyword_elas": "elasticsearch"
                    }
                }
            }
        }
    }
}}

对于上面的查询,我得到了一个例外

  

elasticsearch.exceptions.RequestError:TransportError(400,   u' search_phase_execution_exception',u'无法创建查询:{\ n   "嵌套" :{\ n"查询" :{\ n"嵌套" :{\ n

由于一些查询错误,这是一个例外吗?或任何版本问题...

谢谢

1 个答案:

答案 0 :(得分:2)

我不太清楚为什么你在这种环境中使用嵌套查询。

如果我有这样的文件:

{
"_index" : "test",
"_type" : "test_five",
"_source" : {
  "doc" : {
    "keyword_elas" : "elasticsearch",
    }
  },
  "doc_as_upsert" : true }

我的目标是匹配keyword_elas字段。我所要做的就是:

GET test/test_five/_search
{
    "query": {
        "match" : {
            "keyword_elas" : "elasticsearch"
        }
    }
}

完全匹配:

分析字段:

 GET test/test_five/_search
    {
        "query": {
            "match" : {
                "keyword_elas" : "elasticsearch",
                 "fuzziness": "0"

            }
        }
    }

注意:如果keyword_elas中的文档包含elasticsearch ABC,则此查询将起作用,因为它将在第一个标记(elasticsearch)上为零模糊。

not analyzed fields(完全匹配)

GET test/test_five/_search
 {
  "query": {
    "term" : { "keyword_elas" : "elasticsearch" } 
  }
}

如果索引中有两个文档

keyword_elas : elasticsearch

keyword_elas : elasticsearch abc

术语查询仅匹配第一个文档。