elasticsearch painless 排序脚本中使用 Map (HashMap)

2023-12-03 03:58

本文主要是介绍elasticsearch painless 排序脚本中使用 Map (HashMap),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考资料https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-casting.html

https://blog.csdn.net/weixin_38809962/article/details/79768002

https://blog.csdn.net/hechaojie_com/article/details/88881503

有一个业务需求,在给 es 中传入一个 id 集合,然后根据条件去过滤掉一些记录。然后分页返回 10 条记录,但是有个条件,排序要按照传入的 id 的顺序进行排序,传入的时候,哪个 id 在前,返回的时候这个 id 也得在前面。只能根据脚本写排序。

GET xxxxx/_doc/_search?size=1000
{"query": {"bool": {"filter": [{"terms": {"exerciseId": [268704949713821702,268704949713821698,268704949713821705,330379959905607682,330379959905607681,330379959905607680,330379959905607687,330379959905607690,330354511029002255,330354511029002245,330354511029002247,330354511029002240,330354511029002243,330354511029002253,268704949713821707,395591013664874499,329589022711406596,329589022711406597,395591013664874500,268704949713821709,395943043096961027,268704949713821706,268704949713821704,330379959905607693,329589022711406598,329589022711406613,395943043096961025,395943043096961024,395591013664874498,329589022711406612,329589022711406601,268704949713821696,268704949713821700,268704949713821697,329589022711406611,329589022711406594,395591013664874497,329589022711406600,330379959905607683,330379959905607685,330379959905607684,330379959905607691,330379959905607689,330379959905607688,330379959905607692,330354511029002248,330354511029002249,330354511029002250,330354511029002251,330354511029002241,330354511029002242,329589022711406595,395943043096961026,330379959905607686,330354511029002246,395591013664874496,329589022711406602,268704949713821701,268704949713821708,329589022711406610,329589022711406599,330354511029002254,329589022711406609,329589022711406614],"boost": 1.0}}],"adjust_pure_negative": true,"boost": 1.0}},"sort": [{"_script": {"script": {"source": "def exerciseId = doc['exerciseId'].value;def str = String.valueOf(exerciseId);params.exerciseIdToScoreMap.get(str);","lang": "painless","params": {"exerciseIdToScoreMap": {"329589022711406599": 4,"329589022711406598": 40,"329589022711406597": 47,"329589022711406596": 48,"329589022711406595": 13,"329589022711406594": 29,"395591013664874497": 28,"330354511029002250": 17,"395591013664874496": 9,"395591013664874499": 49,"395591013664874498": 36,"330354511029002242": 14,"330354511029002243": 52,"330354511029002240": 53,"330354511029002241": 15,"330354511029002246": 10,"330354511029002247": 54,"330354511029002245": 55,"330354511029002248": 19,"330354511029002249": 18,"268704949713821697": 31,"268704949713821696": 33,"268704949713821698": 63,"330354511029002253": 51,"330354511029002254": 3,"330354511029002251": 16,"330354511029002255": 56,"329589022711406614": 1,"329589022711406613": 39,"329589022711406612": 35,"329589022711406611": 30,"329589022711406610": 5,"268704949713821701": 7,"268704949713821700": 32,"268704949713821702": 64,"268704949713821705": 62,"268704949713821704": 42,"268704949713821707": 50,"268704949713821706": 43,"268704949713821709": 45,"268704949713821708": 6,"330379959905607687": 58,"395943043096961027": 44,"395591013664874500": 46,"330379959905607688": 21,"330379959905607685": 25,"330379959905607686": 11,"330379959905607683": 26,"330379959905607684": 24,"330379959905607681": 60,"330379959905607682": 61,"329589022711406609": 2,"330379959905607680": 59,"395943043096961024": 37,"395943043096961025": 38,"329589022711406602": 8,"329589022711406601": 34,"395943043096961026": 12,"329589022711406600": 27,"330379959905607689": 22,"330379959905607692": 20,"330379959905607693": 41,"330379959905607690": 57,"330379959905607691": 23}}},"type": "number","order": "desc"}}]
}

map 在使用的时候有两种方式:

  1. 一种是 map.key 这样
  2. 另一种是 map.get(key) 这种形式。

如果 key 是脚本中定义的变量,则只能 map.get(key) 这种形式,今天尝试了好久终于调好了,特此记录一下,以飨后来人。

这篇关于elasticsearch painless 排序脚本中使用 Map (HashMap)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447989

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]