【发布时间】:2017-08-08 14:57:55
【问题描述】:
假设,在 ElasticSearch 5 中,我有如下嵌套的数据:
{"number":1234, "names": [
{"firstName": "John", "lastName": "Smith"},
{"firstName": "Al", "lastName": "Jones"}
]},
...
我想查询编号为 1234 的匹配,但仅返回匹配“lastName”的名称:“Jones”,以便我的结果省略不匹配的名称。换句话说,我只想取回匹配文档的一部分,基于术语查询或类似内容。
一个简单的嵌套查询是行不通的,因为它会过滤顶级结果。有什么想法吗?
{ "query" : { "bool": { "filter":[
{ "term": { "number":1234} },
???? something with "lastName": "Jones" ????
] } } }
我要回来:
hits: [
{"number":1234, "names": [
{"firstName": "Al", "lastName": "Jones"}
]},
...
]
【问题讨论】:
-
第二个答案应该可以满足您的需求,对吧?
-
您是否找到了适合您的目的的好解决方案?接受的答案似乎不是解决方案,因为您还在下面评论。我还需要对嵌套对象进行完全相同的过滤,但这些内部匹配项会单独返回,并且还会返回整个嵌套对象列表。嵌套对象甚至不可能吗?你最后是亲子了吗?也可以在这里查看我的问题stackoverflow.com/questions/48750696/…
-
我没有找到我想要的东西。如果我负责弹性,我可能会添加这个功能!
-
@Phillip Baumann 的答案就是您所需要的。请检查它和我的评论。
-
@Algorini 请阅读上面 Emil 的评论,如果我在 es 文档中对同一个数组使用 must 运算符进行多个嵌套查询,则单独返回内部命中,如何获得常见的组合内部命中。请对此提供帮助,如果您需要更多详细信息,请告诉我。
标签: elasticsearch