elasticsearch ElasticSearch-按内部点击过滤结果
我们有一个简单的实体索引和映射:
elasticsearch ElasticSearch-按内部点击过滤结果,
elasticsearch,
elasticsearch-5,
elasticsearch,
elasticsearch 5,我们有一个简单的实体索引和映射: PUT resource/_mapping/entity { "properties": { "id": { "type": "keyword" }, "name": { "type": "keyword" }, "claims": { "type": "nested", "properties": { "claimid": { "ty
PUT resource/_mapping/entity
{
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "keyword"
},
"claims": {
"type": "nested",
"properties": {
"claimid": {
"type": "keyword"
},
"priority": {
"type": "short"
},
"visibility": {
"type": "keyword"
}
}
}
}
}
以下是索引中的示例文档:
POST resource/entity/
{
"id": "2",
"name": "e2",
"claims": [
{
"claimid": "c1",
"priority": "2",
"visibility": "M",
"reqid" : "2"
},
{
"claimid": "c2",
"priority": "1",
"visibility": "V",
"reqid" : "2"
},
{
"claimid": "c5",
"priority": "3",
"visibility": "H",
"reqid" : "2"
}
]
}
以及一个查询,用于根据提供的一组“claims.claimid”筛选文档,然后按“claims.priority”排序,选择优先级最高的一个,并仅返回“claims.visibility”,例如:
GET resource/entity/_search/
{
"query": {
"nested": {
"path": "claims",
"query": {
"bool": {
"must": [
{
"terms": {
"claims.claimid": [
"c1",
"c4",
"c5"
]
}
}
]
}
},
"inner_hits": {
"sort": [
{
"claims.priority": "asc"
}
],
"size":1,
"_source":{"includes":["claims.visibility"]}
}
}
}
}
最后要解决的问题是:如何修改查询以筛选出在内部点击中具有最高优先级的可见性为“H”的文档?或者,还有什么其他查询将返回一组文档,这些文档的可见性是通过提供的索赔ID过滤的最高优先级的,但仅限于可见性不是“H”的文档
这里的一个陷阱是,我们必须对具有所有类型的可视性的文档进行排序,并在完整的结果列表中过滤掉那些结果为“H”的文档