以下是我的JSON文档的示例格式,它存储在elasticsearch中。
{
"_index": "in22",
"_type": "event",
"_id": "ET00009709",
"_version": 1,
"_score": 1,
"_source": {
"Group": "Event",
"Title": "Jurassic World",
"_boost": 3,
"inner_hits": [
{
"Code": "ET00009709",
"IsDefault": "",
"Language": "English",
"Format": "3D",
"Region": "MUMBAI"
},
{
"Code": "ET00009710",
"IsDefault": "Y",
"Language": "English",
"Format": "2D",
"Region": "CHEN"
},
{
"Code": "ET00009713",
"IsDefault": "",
"Language": "Hindi",
"Format": "2D",
"Region": "MUMBAI"
},
{
"Code": "ET00009714",
"IsDefault": "",
"Language": "Tamil",
"Format": "3D",
"Region": "MUMBAI"
},
{
"Code": "ET00009715",
"IsDefault": "",
"Language": "Hindi",
"Format": "3D",
"Region": "MUMBAI"
},
{
"Code": "ET00009716",
"IsDefault": "",
"Language": "Bengali",
"Format": "2D",
"Region": "MUMBAI"
}
]
}
}
现在我想要实现的是每当我搜索Title=Jurassic World and region=MUMBAI
时,我都应该获得上述文档,但inner_hits
不应包含
{
"Code": "ET00009710",
"IsDefault": "Y",
"Language": "English",
"Format": "2D",
"Region": "CHEN"
}
这是可以实现的吗?
我到目前为止尝试的是
{
"query": {
"nested": {
"path": "inner_hits",
"query": {
"bool": {
"must": [
{
"match": {
"inner_hits.Region": "MUMBAI"
}
}
]
}
}
}
}
}
但是我无法达到我想要的效果,它根本没有删除包含Region: Chen
的块
如果有人知道如何解决这个问题,请分享。 感谢
答案 0 :(得分:1)
一个解决方法是使用elasticsearch 1.5中添加的inner_hit功能。 这将返回与嵌套查询匹配的嵌套文档。
示例:
{
"_source": {
"exclude": ["inner_hits.*"]
},
"query": {
"nested": {
"path": "inner_hits",
"query": {
"bool": {
"must": [
{
"match": {
"inner_hits.Region": "MUMBAI"
}
}
]
}
},
"inner_hits": {
"size" : 10
}
}
}
}
回复
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 3.8630462,
"_source": {
"Group": "Event",
"_boost": 3,
"inner_hits": [],
"Title": "Jurassic World"
},
"inner_hits": {
"inner_hits": {
"hits": {
"total": 2,
"max_score": 3.8630462,
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "1",
"_nested": {
"field": "inner_hits",
"offset": 2
},
"_score": 3.8630462,
"_source": {
"Code": "ET00009713",
"IsDefault": "",
"Language": "Hindi",
"Format": "2D",
"Region": "MUMBAI"
}
},
{
"_index": "test",
"_type": "test",
"_id": "1",
"_nested": {
"field": "inner_hits",
"offset": 0
},
"_score": 3.8630462,
"_source": {
"Code": "ET00009709",
"IsDefault": "",
"Language": "English",
"Format": "3D",
"Region": "MUMBAI"
}
}
]
}
}
}
}
]
除了inner_hits
之外,响应中还有一个_source
,它只包含匹配的嵌套文档。默认情况下,inner_hits
会返回前3个嵌套文档。您可以使用size选项进行调整。