sorting - ElasticSearch 按值排序
问题描述
我有 ElasticSearch 5,我想根据字段值进行排序。想象一下具有类别的文档,例如可以具有科幻、戏剧、喜剧等值的类型,在进行搜索时,我想排序值,以便首先出现喜剧,然后是科幻和戏剧。然后,我当然会按其他标准在组内排序。有人可以指出我如何做到这一点吗?
解决方案
使用手动排序的 Elasticsearch 排序
elasticsearch
在您可以根据字段的特定值分配顺序的情况下,这是可能的。
我已经使用基于脚本的排序实现了您正在寻找的内容,该排序利用了无痛脚本。您可以参考我提到的链接以了解更多关于以下查询的信息,这足以满足您的需求。
还假设你有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
每种类型进行排序。
希望能帮助到你。
推荐阅读
- excel - 在 A1 到 A70 范围内,如果单元格为空/空白,则删除该整行并将下面的其他行向上移动
- tensorflow - 如何在 for 循环中创建张量列表并在 tensorflow2 中使用 tf.stack
- email - 用于从 Google 电子表格导入多列数据以自动触发邮件的宏
- python - 添加没有参数的层后无法加载优化器权重
- zsh - 为普通/超级用户自定义 zsh 提示?
- sed - 按新行拆分 du 命令的结果
- javascript - 有没有办法使用 AJV 从外部 URL 加载架构
- reactjs - React Hooks 上的简单 useState 触发了一个奇怪的错误 undefined is not iterable (cannot read property Symbol(Symbol.iterator))
- javascript - 无法访问对象内部的属性
- r - 在 R 中,如何解析包含“# min”的变量并将这些变量转换为秒?