elasticsearch 过滤嵌套对象ElasticSearch
您好: 是否可以过滤掉不相关的嵌套对象?用例是,您只有一个父级,但父级有多个子级。比如说,一个特定的父母……有100个孩子;我需要一种方法来过滤掉特定的子项,这样从100个子项中,我就得到了结果的一个子集 已更新 运行以下查询elasticsearch 过滤嵌套对象ElasticSearch,elasticsearch,nest,elasticsearch,Nest,您好: 是否可以过滤掉不相关的嵌套对象?用例是,您只有一个父级,但父级有多个子级。比如说,一个特定的父母……有100个孩子;我需要一种方法来过滤掉特定的子项,这样从100个子项中,我就得到了结果的一个子集 已更新 运行以下查询 GET /dev/doc/_search?typed_keys=true {"_source":{"includes":["reviews"]},"query":{"nested":{"query":{"bool":{"filter":[{"term":{"reviews
GET /dev/doc/_search?typed_keys=true
{"_source":{"includes":["reviews"]},"query":{"nested":{"query":{"bool":{"filter":[{"term":{"reviews.userId":{"value":"339c8add-4278-4acd-905e-64b9acabc71a"}}}]}},"path":"reviews"}}}
然而,我得到了以下结果:
"reviews": [
{
"score": 0,
"friendlinessOfStaff": 1,
"amenities": 2,
"grounds": 2,
"reviewDate": "2018-07-03T02:00:34.8735726-07:00",
"qualityOfCare": 4,
"activities": 2,
"facilityReviewReplies": [],
"id": "56a4bac2-85d0-4ccf-aba2-fd9ff74fb3a5",
"message": "blah blah blah",
"userId": "339c8add-4278-4acd-905e-64b9acabc71a",
"cleanliness": 4
},
{
"score": 0,
"friendlinessOfStaff": 1,
"amenities": 2,
"grounds": 2,
"reviewDate": "2018-07-04T12:01:22.228658-07:00",
"qualityOfCare": 4,
"activities": 2,
"facilityReviewReplies": [],
"id": "f2f1b84e-bc1d-4e9c-b6d5-bdc578cb1b5f",
"message": "blah blah blah",
"userId": "7f1d389d-1316-4058-9857-ca51ecd9f5f8",
"cleanliness": 4
}
]
正如您可以看到的,此列表中的最后一个对象具有“userId”:“7f1d389d-1316-4058-9857-ca51ecd9f5f8”,它不匹配,但是,过滤器仍在返回值。你知道为什么会这样吗?你使用的是什么客户端 您可能想要这样的东西(java): 否则就是这样: 您可以指定要包括和排除的字段,如下所示:
GET /_search
{
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}
你用的是什么客户机 您可能想要这样的东西(java): 否则就是这样: 您可以指定要包括和排除的字段,如下所示:
GET /_search
{
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}
听起来像是在问如何过滤返回的内部嵌套对象。如果您询问如何选择返回哪些列而不过滤这些列中的数据,Andreas的回答将有所帮助 要仅返回与查询匹配的嵌套对象,可以使用
internal\u hits
。基本上,只需将其添加到查询子句中,就可以得到匹配的内部对象。您还可以选择添加更多的分页等配置选项
GET index/_search
{
"query": {
"nested": {
"path": "field_name",
"query": { ... },
"inner_hits": {}
}
}
}
听起来像是在问如何过滤返回的内部嵌套对象。如果您询问如何选择返回哪些列而不过滤这些列中的数据,Andreas的回答将有所帮助 要仅返回与查询匹配的嵌套对象,可以使用
internal\u hits
。基本上,只需将其添加到查询子句中,就可以得到匹配的内部对象。您还可以选择添加更多的分页等配置选项
GET index/_search
{
"query": {
"nested": {
"path": "field_name",
"query": { ... },
"inner_hits": {}
}
}
}
谢谢你的回复,安德烈亚斯。问题是…我可以查询嵌套对象吗?我的客户也是NEST。是的,你可以查询嵌套对象,看看吧,谢谢你的回复Andreas。问题是…我可以查询嵌套对象吗?另外,我的客户是NEST。是的,你可以查询嵌套对象,看看NEST的内部点击文档:@RussCam&Ryan。。我已经更新了我原来的帖子。运行嵌套查询仍然没有显示理想的结果。@Dean您更新的查询没有包含嵌套查询的
内部\u命中:{}
query@RussCam好的。我会更新并分享结果…谢谢。@RussCam非常感谢。internal\u hits
肯定有效。NEST for internal hits的文档:@RussCam&Ryan。。我已经更新了我原来的帖子。运行嵌套查询仍然没有显示理想的结果。@Dean您更新的查询没有包含嵌套查询的内部\u命中:{}
query@RussCam好的。我会更新并分享结果…谢谢。@RussCam非常感谢。internal\u hits
肯定有效。