一尘不染

内部匹配无法与嵌套过滤器一起使用?

elasticsearch

我刚刚升级到Elastic Search
1.5.0,到目前为止,尽管嵌套查询可以正常工作,但我无法使inner_hits与嵌套过滤器一起使用。

比方说,我要检索的内部嵌套对象 演员 一中 的电影 对象。

当我运行以下 嵌套查询时

语法1

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

=>我得到了这里记录的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] [嵌套]需要“查询”或“过滤器”字段]

(当我删除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" : {}
        }
    }
}

即使此语法与嵌套过滤器文档不匹配

=>我仍然不了解语法2的问题。在我看来,这似乎是一个ES错误。

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


阅读 266

收藏
2020-06-22

共1个答案

一尘不染

臭虫固定在ElasticSearch
1.5.1的规定在这里

因此,此语法有效(并且工作正常)

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

多谢你们!

2020-06-22