我想在弹性搜索2.4中过滤一些数据。
更具体地说,我只想考虑“岛屿”下的记录。标签。
如果我像这样过滤:
filter : [{term: {Artists.Artist.Records.label : "Island"}}]
我会失去迈尔斯,但保留其他两个,因为他们有一个岛屿标签。这很好,但我想丢失所有无岛记录,但仍保留所有数据。
所以给出:
{
"Artists": [
{
"Artist": "Tom Waits",
"Records": [
{
"id": 1,
"title": "Rain dogs",
"label": "Island"
},
{
"id": 2,
"title": "SwordFishTrombones",
"label": "Island"
},
{
"id": 3,
"title": "Bone Machine",
"label": "ANTI"
}
]
},
{
"Artist": "dEUS",
"Records": [
{
"id": 112,
"title": "Worst Case Scenario",
"label": "Island"
},
{
"id": 2213,
"title": "Keep you close",
"label": "Universal"
}
]
},
{
"Artist": "Miles",
"Records": [
{
"id": 42,
"title": "Kind of blue",
"label": "columbia"
}
]
}
]
}
我想最终:
{
"Artists": [
{
"Artist": "Tom Waits",
"Records": [
{
"id": 1,
"title": "Rain dogs",
"label": "Island"
},
{
"id": 2,
"title": "SwordFishTrombones",
"label": "Island"
}
]
},
{
"Artist": "dEUS",
"Records": [
{
"id": 112,
"title": "Worst Case Scenario",
"label": "Island"
}
]
}
]
}
这可能吗?谢谢!
答案 0 :(得分:1)
我相信这可以通过内部命中功能来实现。您的查询看起来像这样:
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "Artists.Artist.Records",
"filter": {
"term": {
"Records.label": "Island"
}
},
"inner_hits" : {}
}
}
}
}
}