内部命中不适用于嵌套过滤器?

时间:2015-03-25 09:36:40

标签: elasticsearch

我刚刚升级到Elastic Search 1.5.0,到目前为止我无法使inner_hits使用嵌套过滤器,尽管它适用于嵌套查询。

假设我想在电影对象中检索内部嵌套对象 actor

当我运行以下嵌套查询

语法1

GET my_index/movie/_search
{
  "query": {
    "filtered": {
      "query": {"match_all": {}},
      "filter": {
        "nested": {
          "path": "actors",
          "query": {
            "match": {
              "actors.id": 12345
            }
          }, 
          "inner_hits" : {}
        }
      }
    }
  }
}

=>我得到了记录为here的inner_hits,这很好。

但是,当我尝试使用嵌套过滤器执行等效查询时:

语法2

GET my_index/movie/_search
{
  "query": {
    "filtered": {
      "query": {"match_all": {}},
      "filter": {
        "nested": {
          "path": "actors",
          "filter": {
            "term": {
              "actors.id": 12345
            }
          }, 
          "inner_hits" : {}
        }
      }
    }
  }
}

=>我得到以下解析错误

  

QueryParsingException [[my_index] [nested]需要'query'或   '过滤'字段]

(当我删除inner_hits时,这最后一个查询工作正常 - 当然除了我没有得到内部命中...)

我使用的语法是否有问题,或者嵌套过滤器还没有实现inner_hits?

提前致谢

编辑3-30-2015

它使用@mdewit下面提供的语法(谢谢!)

语法3

GET my_index/movie/_search
{
    "query": {
        "nested": {
            "path": "actors",
            "query": {
                "filtered": {
                    "filter": {
                        "term": {"actors.id": 12345}
                    }
                }
            },
            "inner_hits" : {}
        }
    }
}

即使此语法与Nested Filter doc

不匹配

=>我仍然不明白Syntax 2有什么问题。对我来说这似乎是一个ES错误。

编辑04-22-2015:错误已修复在ES 1.5.1中,请参阅下面的评论

2 个答案:

答案 0 :(得分:6)

以下似乎有效:

GET my_index/movie/_search
{
    "query": {
        "nested": {
            "path": "actors",
            "query": {
                "filtered": {
                    "filter": {
                        "term": {"actors.id": 12345}
                    }
                }
            },
            "inner_hits" : {}
        }
    }
}'

答案 1 :(得分:3)

在ElasticSearch 1.5.1中修复了错误here

所以这种语法有效(并且工作正常)

GET my_index/movie/_search
{
  "query": {
    "filtered": {
      "query": {"match_all": {}},
      "filter": {
        "nested": {
          "path": "actors",
          "filter": {
            "term": {
              "actors.id": 12345
            }
          }, 
          "inner_hits" : {}
        }
      }
    }
  }
}

谢谢你们!