概述

ES支持groovy 和 java两种语言自定义score的计算方法,groovy甚至可以嵌套在请求的参数中,有点厉害,不过不在本篇讨论范围。

如何用自定义的java代码来定义score如何产生,这用到了ES的插件功能

关于es插件的相关操作,可以通过以下命令获得

./bin elasticsearch-plugn –h

操作步骤

1.增加配置

首先需要在ES的配置中增加以下,

旧版本是

script.disable_dynamic: false

目前用的ES是5.2.2,根据日志提示,改成如下,改完后需要重启ES

script.inline: truescript.stored: true

不得不说这个日志提供的信息真不错

如果不加这两条配置,则会这样这种错误

2.写java代码

//java代码格式参考

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/modules-scripting-native.html

3.写配置文件

配置文件格式参考

https://github.com/elastic/elasticsearch/blob/master/buildSrc/src/main/resources/plugin-descriptor.properties

4.上传到ES集群

在$ELASTICSEARCH_HOME/plugins新建一个文件夹,这个文件夹的名称就是这个插件的名称,

例如有 三个文件夹

可以通过如下命令找到他们

在新建的文件夹中,导入jarplugin-descriptor.properties文件(必须有)

5.重启ES服务

kill -9 pid

nohup ./elasticsearch &

6.使用

{"query": {"function_score": {"query": {"match": {"your_fields": "xxxx"}},"functions": [{"script_score": {"script": {"inline": "key","lang": "native","params": {"your_fields": "xxxxx"}}}}]}}}

key解释:

Key

解释

备注

inline

调用插件的key,和插件名称是两个东西

在NativeScriptFactory接口中的
getName()方法设置

lang

自定义方式

native意思是用java原生实现

//关于自定义function-script-score

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#function-script-score

7.更新插件

由于ES集群会缓存插件代码,就算把插件删了依然可用,目前还是需要重启来更新插件

参考资料

//自定义java制作插件必要的步骤

https://www.elastic.co/guide/en/elasticsearch/plugins/5.2/plugin-authors.html#_plugin_structure

//github完整插件

https://github.com/momoxixi/elasticsearch-feature-vector-scoring

转载于:https://www.cnblogs.com/ulysses-you/p/7066766.html

elasticsearch系列(七)java定义score相关推荐

  1. Elasticsearch系列(六)----JAVA客户端之Jest操作详解

    Jest示例代码如下: package com.fendo.JestClient;import java.io.IOException; import java.text.SimpleDateForm ...

  2. mybatis 源码系列(七) Java基础之数据库事务隔离级别

    更多mybatis 源码系列文章可关注我的博客,点击前往 正确设置数据库的事务访问级别,有助于我们的应用程序达到预期的效果 在mybatis中,提供了事务隔离级别的枚举类:org.apache.iba ...

  3. java面向对象编程集合边框_Java学习系列(七)Java面向对象之集合框架详解(上)

    Java集合 有时也将集合称为容器类,它的作用就是用来"装对象"的.这里要注意的是集合也可以是对象.下面先看一张图: HashSet:底层用一个数组存元素 --而且这个数组的长度永 ...

  4. MySQL---数据库从入门走向大神系列(七)-Java访问数据库配置及简单使用方法execute

    从操作配置文件properties中读取连接字符串,通过该字符串进行数据连接,需要写三个文件其中,两个是java类,一个是后缀名为.properties的文件,该文件放在src工作目录下. 需要准备的 ...

  5. ios 获取一个枚举的所有值_凯哥带你从零学大数据系列之Java篇---第十一章:枚举...

    温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...

  6. Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  7. ElasticSearch系列 - 安装

    ElasticSearch系列 - 安装 ElasticSearch 安装 elasticSearch下载 选择MACOS 下载,然后解压zip包 Elasticsearch目录结构为: 目录 配置文 ...

  8. Elasticsearch 系列文章(一):Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  9. java转安卓快吗_安卓Kotlin开发系列之Java快速转Kotlin

    原标题:安卓Kotlin开发系列之Java快速转Kotlin 自从Kotlin被宣布为Android开发语言的官方支持后,如今可谓是火的一塌糊涂,作为一名Android程序员,如何快速爬坑?今天为大家 ...

最新文章

  1. 二十三、oracle pl/sql分类三 包
  2. 应用系统中交互式报表功能解析
  3. java fastjson_java操作json数据之fastjson
  4. php mysql 连接方法 对比_Mysql实例php连接MySQL的两种方式对比
  5. python开源流程图软件_Dia
  6. php 卡迪尔的秘密
  7. scanner 获取控制台信息_Java使用Scanner类进行控制台输入实现方法
  8. android studio建数据库表,在android studio中创建表
  9. laravel windows 下queue能长时间执行吗_后台执行超长时间任务解决方案
  10. 给eclipse安装反编译
  11. 基于visual Studio2013解决面试题之0202上下排
  12. Java抓取淘宝/天猫商品详情 1
  13. (转载)高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO-TONE IMD...
  14. 保角变换法matlab编程,保角变换法.ppt
  15. mysql 1236 bug_【转】MySQL主从失败 错误Got fatal error 1236解决方法
  16. linux中为什么要分区,为什么要分区
  17. 1234变4321java_java:把1234成4321整数倒逆代码
  18. Jmeter测试最大在线用户数
  19. 为什么访问亚马逊的网站卡顿?
  20. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

热门文章

  1. java关键字--static--应用场景、特点和注意事项
  2. 写在马哥教育第八期开始之前
  3. 20060911: 新机器·流氓软件
  4. BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding
  5. Material Design 设计规范总结(2)
  6. 机房重构(个人版)——类图
  7. 给UIScrollView添加category实现UIScrollView的轮播效果
  8. 构建之法课后作业第二次作业第一题
  9. 使用expect 打通到其他服务器无密码访问
  10. Windows Azure AppFabric概述