假设我有一些名为“room”的父文档,以及一些名为“person”的子文档,其中包含“age”字段。现在我想使用 ES 中的 custom_score 查询使用年龄字段对一些房间进行评分。
我已经使查询几乎按预期工作,唯一的问题是:空房间(没有子文档)没有得分。我怎样才能给他们一个默认分数或其他东西。在这个例子中,我想给 room_id 为 1~5 的五个房间打分。如果房间 4 没有子文档,则不计分。查询只会命中 4 条具有预期分数的记录。我想要的是给空房间一个默认分数。也许函数分数查询适合这种情况,但我使用 NEST 作为当前不支持函数分数查询的 .NET 客户端。
顺便说一句:SO 的 CSS 在这里不起作用,我不知道为什么。如果这篇文章格式不正确,请帮忙编辑,谢谢。
{
"query": {
"custom_score": {
"script": "_score",
"query": {
"filtered": {
"query": {
"has_child": {
"type": "person",
"score_type": "sum",
"query": {
"custom_score": {
"script": "doc['person.age'].value - 50d",
"query": {
"match_all": {}
}
}
}
}
},
"filter": {
"bool": {
"should": [
{
"terms": {
"room_id": [ "1", "2", "3", "4", "5" ]
}
}
]
}
}
}
}
}
}
}