elasticsearch 按值列表中的位置排序
我需要构建elasticsearch查询,通过数组中的字段值定位进行排序 与MySQL类似:
elasticsearch 按值列表中的位置排序,
elasticsearch,
elasticsearch,我需要构建elasticsearch查询,通过数组中的字段值定位进行排序 与MySQL类似: SELECT * FROM `comments` ORDER BY FIELD(`id`,'17','3','5','12') DESC, id DESC; 或博士后: SELECT * FROM comments LEFT JOIN unnest('{12,5,3,17}'::int[]) WITH ORDINALITY t(id, ord) USING (id) ORDER BY t.ord,
SELECT * FROM `comments` ORDER BY FIELD(`id`,'17','3','5','12') DESC, id DESC;
或博士后:
SELECT * FROM comments
LEFT JOIN unnest('{12,5,3,17}'::int[]) WITH ORDINALITY t(id, ord) USING (id) ORDER BY t.ord, id DESC;
您正在elasticsearch中查找自定义排序
可以通过无痛脚本来实现
我就是这么做的
PUT my_test
{
"mappings": {
"properties": {
"animal": {
"type": "keyword"
}
}
}
}
填充文档
POST my_test/_doc
{
"animal": "mouse"
}
POST my_test/_doc
{
"animal": "cat"
}
POST my_test/_doc
{
"animal": "dog"
}
自定义排序
GET my_test/_search
{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "if(params.scores.containsKey(doc['animal'].value)) { return params.scores[doc['animal'].value];} return 100000;",
"params": {
"scores": {
"dog": 0,
"cat": 1,
"mouse": 2
}
}
},
"order": "asc"
}
}
}
只是为了赞美上面的答案 您可以结合使用这种方法将某些项目提升到顶部,并根据搜索结果中所有其他项目的相关性保持原始排序
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "if(params.scores.containsKey(doc['sku'].value)) { return params.scores[doc['sku'].value];} return 10",
"params": {
"scores": {
"3JK76": 0,
"8UF78": 1
}
}
},
"order": "asc"
},
"_score": { "order": "desc" }
}