需求:以索引中的boostapp列作为评分的基础分值,同时根据carpublishtime(数据的刷新时间字段)按时间进行衰减。

基于Groovy脚本实现。

1、query脚本方式:

{"fields": ["boost","ucarid","boostapp","carpublishtime"],"query": {"function_score": {"query": {"match_all": {}},"functions": [{"script_score": {"script": "import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;time2=((new Date().getTime()- new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(_source.carpublishtime.replace('T',' ')).getTime())/60000);if(time2<=60)_source.boostapp+time2/5 else if(time2<=120)_source.boostapp+(time2/10-6)*8 else if(time2<=180)_source.boostapp+(time2/10-12)*5 else _source.boostapp"}}],"boost_mode": "replace","score_mode": "sum"}},"from": 0,"size": 10
}

  

2、Nest方式:

QueryContainer mainQuery = null;
FunctionScoreQuery funcQuery = new FunctionScoreQuery();
funcQuery.ScoreMode = FunctionScoreMode.Sum;
funcQuery.BoostMode = FunctionBoostMode.Replace;
funcQuery.MaxBoost = 1000.0f;
ScriptFilter scriptFilter = new ScriptFilter();
scriptFilter.Script = "import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;time2=((new Date().getTime()- new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').parse(_source.carpublishtime.replace('T',' ')).getTime())/60000);if(time2<=60)_source.boostapp+time2/5 else if(time2<=120)_source.boostapp+(time2/10-6)*8 else if(time2<=180)_source.boostapp+(time2/10-12)*5 else _source.boostapp";
funcQuery.ScriptScore = scriptFilter;
mainQuery &= funcQuery;

  

转载于:https://www.cnblogs.com/lijunhao/p/5564835.html

Elasticsearch的Groovy Script自定义评分检索相关推荐

  1. 【Elasticsearch】Elasticsearch自定义评分的N种方法

    1.概述 首先参考文章:[Elasticsearch]Elasticsearch 相关度评分 TF&IDF 然后转载文章:实战 | Elasticsearch自定义评分的N种方法 2.三个问题 ...

  2. 如何使用Elasticsearch groovy script脚本更新数据

    2019独角兽企业重金招聘Python工程师标准>>> 如何使用Elasticsearch groovy script脚本更新数据 博客分类: 搜索引擎,爬虫 今天细说一下elast ...

  3. ES自定义评分机制:function_score查询详解

    一.function_score介绍 主要用于让用户自定义查询相关性得分,实现精细化控制评分的目的. 在ES的常规查询中,只有参与了匹配查询的字段才会参与记录的相关性得分score的计算.但很多时候我 ...

  4. 【Elasticsearch】Elasticsearch中的相似度评分介绍

    1.概述 转载:Elasticsearch中的相似度评分介绍 本文要点 相关性得分是一个搜索引擎的核心,了解它的工作原理对创建一个好的搜索引擎至关重要. Elasticsearch 使用了两种相似度评 ...

  5. ElasticSearch 使用教程之_score(评分)介绍

    前言 ​ 使用ES时,对于查询出的文档无疑会有文档相似度之别.而理想的排序是和查询条件相关性越高排序越靠前,而这个排序的依据就是_score.本文就是详解_score有关的信息,希望能对排序评分的理解 ...

  6. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 创建 XmlNode 节点 | 管理 XmlNode 节点并将根节点转为 Xml 信息 | 完整代码示例 )

    文章目录 一.创建 XmlNode 节点 二.管理 XmlNode 节点并将根节点转为 Xml 信息 三.完整代码示例 1.自定义 Xml 生成器 MyBuilderSupport 2.Xml 节点封 ...

  7. 【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Java 类中 , 调用 Groovy 脚本 , 出现如下错误 ; java.io.FileNotFoundException: Y:\002_ ...

  8. elasticsearch分词练习、自定义分词器练习

    elasticsearch分词练习.自定义分词器练习 分词练习 自定义分词器 分词练习 准备数据 post metric_zabbix/log {"@message":" ...

  9. python打分函数_自定义评分函数RandomForestRegress

    RandomizedSearchCV中的评分函数将只计算网格中指定的每个超参数组合的模型预测数据的得分,测试折叠中平均得分最高的超参数获胜.在 它不会以任何方式改变RandomForest内部算法的行 ...

最新文章

  1. linux如何修改权限详解
  2. 在Vue中遇到的各种坑 及性能提升
  3. eclipse连接小米2调试程序的问题
  4. 1.19 String、StringBuffer和StringBuilder类的区别
  5. c# 设计原则需要学习吗_向最好的学习:产品设计原则
  6. 使用Spring发送带附件的电子邮件(站内和站外传送)
  7. Build Roads
  8. 前端学习(595):使用network进行详细分析
  9. springboot自动配置的原理_SpringBoot实战:详解SpringBoot自动配置原理
  10. 内存中Android,什么是Android内存转储中的EGL和GL mtrack?
  11. sql语句分析是否走索引_mysql sql语句执行时是否使用索引检查方法
  12. 计算机组成原理时序电路报告,时序电路实验报告
  13. 计算机专业必备基础知识500题,计算机基础知识500题
  14. php会议预约,会议预约系统-信息发布系统|多媒体信息发布系统|视展信息发布系统首页...
  15. m3u8在线播放工具,在线播放地址
  16. WPS标题段前间距设置无效解决方案
  17. TCP/IP重传超时--RTO - SRTT (Smoothed Round Trip Time)
  18. 搭建自己的Milvus以图搜图服务
  19. ValueError: y contains previously unseen labels: ‘103125‘
  20. Java面试问题集锦

热门文章

  1. Android用户界面程序设计示例
  2. this和prototype
  3. access查询出生日期格式转换_从身份证中提取出生日期的3个方法和计算年龄和星座的方法...
  4. 虚拟字符设备驱动开发步骤
  5. php oracle视图,Oracle v$database视图分析
  6. ios3怎么取消长按弹出菜单_苹果:iOS13取消3D-Touch重压改为长按只是个BUG~
  7. activiti idea 请假流程_IDEA开发流程Activiti需要注意的一些坑
  8. java记事本课程设计,java记事本课程设计
  9. 转list_你知道Java数组转List的三种方式及对比吗?
  10. DNS域名系统的几个基础概念