假设我有一些名为“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" ]
}
}
]
}
}
}
}
}
}
}
答案 0 :(得分:4)
您的has_child
过滤器使其仅包含具有子项的父记录,但您需要所有父记录。你可以使用bool来查询两个should子句:
must
计算has_child
和custom_score
)must_not
带有has_child
和默认分数){ "query": { "custom_score": { "script": "_score", "query": { "filtered": { "query": { "bool" : { "should" : [ { "bool" : { "must" : { "has_child": { "type": "person", "score_type": "sum", "query": { "custom_score": { "script": "doc['person.age'].value - 50d", "query": { "match_all": {} } } } } } } }, { "bool" : { "must_not" : { "has_child": { "type": "person", "query": { "match_all": {} } } } } } ] } }, "filter": { "bool": { "should": [ { "terms": { "room_id": ["1","2","3","4","5"] } } ] } } } } } } }