有谁知道是否可以在 elasticsearch 中自定义排序?
我对类别字段进行了排序。按类别将所有记录组合在一起。这很好用。
但是,您能否给排序一个列表,例如汽车、书籍、食物。
然后它会先展示汽车,然后是书籍,最后是食物?
小智 6
您可以使用function_score 查询,如下所示:
{
"query": {
"function_score": {
"query": { "match_all": {} },
"boost": "5",
"functions": [
{
"filter": { "match": { "category": "cars" } },
"weight": 100
},
{
"filter": { "match": { "category": "books" } },
"weight": 50
},
{
"filter": { "match": { "category": "food" } },
"weight": 1
}
],
"score_mode": "max",
"boost_mode": "replace"
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以在何处放置您现在使用的任何查询而不是match_all查询,并保留sort(默认值是按分数,这就是您在这里想要的)。
这是用每个类别的自定义分数替换 elasticsearch 通常生成的分数。您可以尝试其他方式boost_mode,以便在类别中获得合理的排名。如果您需要了解评分发生了什么,您可以添加"explain": true到顶级查询。
| 归档时间: |
|
| 查看次数: |
4218 次 |
| 最近记录: |