2

我正在使用 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'failed to create query: {\n "nested" : {\n "query" : {\n "nested" : {\n

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

谢谢你

4

1 回答 1

3

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

如果我有这样的文件:

{
"_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

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

于 2016-12-30T19:26:46.880 回答