当前位置: 首页 > 知识库问答 >
问题:

内部命中不能使用嵌套过滤器?

林富
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" : {}
        }
      }
    }
  }
}

=

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

语法 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]需要“查询”或“过滤器”字段]

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

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

先谢谢你

编辑2015年3月30日

它可以使用@mdewit提供的语法(谢谢!)

语法3

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

即使此语法与嵌套筛选器文档不匹配

=

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

共有2个答案

凤晨朗
2023-03-14

弹性搜索 1.5.1 中修复的错误,如此处所述

所以这种语法行得通(而且行得通)

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

谢谢你们!

杨乐意
2023-03-14

以下方法似乎行得通:

GET my_index/movie/_search
{
    "query": {
        "nested": {
            "path": "actors",
            "query": {
                "filtered": {
                    "filter": {
                        "term": {"actors.id": 12345}
                    }
                }
            },
            "inner_hits" : {}
        }
    }
}'
 类似资料:
  • 问题内容: 我刚刚升级到Elastic Search 1.5.0,到目前为止,尽管嵌套查询可以正常工作,但我无法使inner_hits与嵌套过滤器一起使用。 比方说,我要检索的内部嵌套对象 演员 一中 的电影 对象。 当我运行以下 嵌套查询时 : 语法1 =>我得到了这里记录的inner_hits ,这很好。 但是当我尝试使用 嵌套过滤器 进行等效查询时: 语法2 =>我得到以下解析错误 Quer

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

  • 你知道我做错了什么吗?下面是我的ORM映射:

  • 我有两个简单的POJOs: 然后我生成一些数据,我为父母添加100个孩子: 我的目标是移除所有10岁以下的儿童: 最后,我列出了十岁以上的孩子。但是我不想写一个单独的方法。 如何得到所有的父母与名单上的孩子十岁以上只使用单一流?

  • 问题内容: Go支持在函数内部嵌套结构,但除了lambda之外没有嵌套函数,这是否意味着无法在函数内部定义嵌套类? 因此,类在函数内部被削弱感到有点奇怪。 有什么提示吗? 问题答案: 实际上,无论您要声明 带有 接收器还是 不 带有接收器的函数都没有关系:不允许在Go中嵌套函数。 尽管您可以使用函数文字来实现以下目的: 在这里,我们创建了一个具有函数类型的变量,并将其分配给另一个函数。调用“外部”

  • 问题内容: 我有这样的角度嵌套对象。有没有办法为嵌套属性过滤它 我只显示父元素,但想按两个元素进行过滤,例如: 问题答案: 是的,如果我正确理解您的示例,则可以。 根据集合的大小,计算迭代所用的集合可能会更好,这样过滤器就不会随着模型的更改而不断地进行操作。 http://jsfiddle.net/suCWn/ 基本上,如果我理解正确,您会执行以下操作: