【问题标题】:Multilevel Nested Query - RequestError Exception 400 - Failed to create query多级嵌套查询 - RequestError 异常 400 - 无法创建查询
【发布时间】:2016-12-30 16:59:50
【问题描述】:

我使用的是 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

这是由于某些查询错误而导致的异常吗?或任何版本问题...

谢谢

【问题讨论】:

  • 我的错误消息底部有一个特定的reason 属性,告诉我我未能正确创建嵌套类型(在设置我的映射时):“caused_by”:{“type”:“非法状态异常”,“原因”:“路径[cmets]下的[嵌套]嵌套对象不是嵌套类型”}

标签: elasticsearch elasticsearch-5


【解决方案1】:

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

如果我有这样的文件:

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

词条查询只会匹配第一个文档。

【讨论】:

  • 您好 Yeikel,我同意这一点。如果您想要完全匹配查询 - 您的答案是什么?
  • 你的领域是分析还是不分析?
  • 对我来说,第一种情况也是抛出异常。在第二种情况下,如果该字段的值为 '"keyword_elas" : "elasticsearch term"' - 即使搜索 elasticsearch 也会返回结果。我希望它像当且仅当搜索“elasticsearch term”时它才应该返回结果。
  • 如果是这样,您需要有一个未分析的字段并使用术语查询。分析的字段将按照您的说明工作。你能发布你的地图吗?
  • '{ "test" : { "mappings" : { "test_five" : { "properties" : { "doc" : { "properties" : { "keyword_elas" : { "type" : "文本”,“字段”:{“关键字”:{“类型”:“关键字”,“ignore_above”:256}}}}},“doc_as_upsert”:{“类型”:“布尔”},“keyword_elas”: {“类型”:“文本”,“字段”:{
猜你喜欢
  • 2023-03-22
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
相关资源
最近更新 更多