我有ElasticSearch 5,我想根据字段值进行排序。想象一下,例如具有类别的文档可能具有科幻,戏剧,喜剧等价值的类型,在搜索时我想对价值进行排序,以便首先出现喜剧,然后是科幻和戏剧。然后,我当然会按照其他条件在小组内订购。有人可以指出我该怎么做吗?
答案 0 :(得分:0)
这在elasticsearch
中是可能的,您可以在其中根据字段的特定值分配顺序。
我已经使用script based sorting脚本实现了您正在寻找的painless。您可以参考我提到的链接,以了解更多有关以下查询的内容,这些内容足以满足您的需求。
还要假设您使用以下映射来将genre
和movie
作为关键字。
PUT sampleindex
{
"mappings": {
"_doc": {
"properties": {
"genre": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"movie": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
您可以利用以下查询来获取所需的内容
GET sampleindex/_search
{
"query": {
"match_all": {}
},
"sort": [{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"inline": "if(params.scores.containsKey(doc['genre.raw'].value)) { return params.scores[doc['genre.raw'].value];} return 100000;",
"params": {
"scores": {
"comedy": 0,
"sci-fi": 1,
"drama": 2
}
}
},
"order": "asc"
}
},
{ "movie.raw": { "order": "asc"}
}]
}
请注意,我同时包含了genre
和movie
的排序。基本上,排序会在genre
上进行,然后再针对每种类型,根据movie
进行排序。
希望有帮助。