当前位置: 首页 > 面试题库 >

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

羊舌青青
2023-03-14
问题内容

我刚刚升级到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中已 修复的错误 ,请参阅下面的评论


问题答案:

臭虫固定在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" : {}
        }
      }
    }
  }
}

多谢你们!



 类似资料:
  • 我刚刚升级到Elastic Search 1.5.0,到目前为止,我无法使inner_hits与嵌套过滤器一起工作,尽管它可以与嵌套查询一起工作。 假设我想检索电影对象中的内部嵌套对象演员。 当我运行以下嵌套查询时: 语法 1 = 但是当我尝试使用嵌套过滤器进行等效查询时: 语法 2 = QueryParsingException[[my_index][nested]需要“查询”或“过滤器”字段]

  • 问题内容: 这是我的代码。请运行脚本以查看其工作方式: 从上面的代码中,我的数据数组包含对象,这些对象具有用户名,他的电话号码和他所属的呼叫队列。 我分别有四个呼叫队列111,456,201和665。 一个用户可以处于任意数量的呼叫队列中。我已经过滤了控制器中的数据,以使其仅显示前端中属于队列111或队列456的用户。 因此,根据我的代码,用户Edmond属于队列665,因此其详细信息不会显示在前

  • 问题内容: 我在ES中有一个多匹配查询,并希望添加一个过滤器。 添加此过滤器的语法是什么? 我试过了: 问题答案: 根据您的需要,必须将过滤器放置在正确的位置。您有两种选择: 使用顶级过滤器,并将该过滤器仅应用于搜索结果,而不应用于各个方面 使用过滤的查询,并将过滤器应用于搜索结果和构面

  • 目前我有这个阵列= 条件: 如果每个嵌套数组index2都相同,那么我想用[0.0 1.0,1.0 2.0,2.0 3.0,3.0 4.0] = [1.0,3.0,5.0,7.0]来求和 我想要的最终结果:[[“efg”, [1.0, 3.0, 5.0, 7.0], “测试”]] 有什么方法或建议来获得这个结果吗?

  • 我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过:

  • 如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(