我有这3个对象(3个有照片的用户,每张照片都有一个类别id)
{
"id": 1,
"name": "User1",
"photos":[
{
"id": 1,
"cat": 1
},
{
"id": 2,
"cat": 1
},
{
"id": 3,
"cat": 2
}
]
}
{
"id": 2,
"name": "User2",
"photos":[
{
"id": 4,
"cat": 1
},
{
"id": 5,
"cat": 2
},
{
"id": 6,
"cat": 2
}
]
}
{
"id": 3,
"name": "User3",
"photos":[
{
"id": 7,
"cat": 2
},
{
"id": 8,
"cat": 3
},
{
"id": 9,
"cat": 3
}
]
}
我想给这些文档一个分数(最高分:10),这取决于它们有多少张照片,cat = 1
Object1 : 2 objects with cat = 1
Object2 : 1 objects with cat = 1
Object3 : 0 objects with cat = 1
所以分数将是Object1 = 10, Object2 = 5, Object3 = 0
无论@eemp说什么,或者如果您不能修改文档索引的方式和/或如果您不能修改映射,那么一个解决方案是利用function_score
查询和script_score
组件,我们访问photos
数组并将具有cat == 1
的元素数量乘以5。
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": "_source.photos.findAll{return it.cat == 1}.size() * 5"
}
}
]
}
}
}
你会得到你期望的分数,即
- 对象1
- 5对象2
- 0对象3