java 如何实现ElasticSearch自定义排序

1、es版本用的是5.1由于需要使用es的script的inline功能,需要修改es yml的配置文件,增加如下配置使其支持inline

script.inline: on
script.stored: on
script.file: on
script.engine.groovy.inline.aggs: on

增加完成上述配置需要重启es 注:不同的es版本配置不同

2、java代码

# 定义传入script的参数
Map params = new HashMap<>();
Map map=new HashMap();
map.put('1','a');
map.put('2','b');
parans.put('m',map);

# 定义script字符串
String script="id = doc[id].value;return m[id+'']";

# 定义script 注意不同的es版本参数顺序不一样
Script script = new Script(ScriptType.INLINE,"groovy",script , params);

# 定义ScriptSortBuilder
ScriptSortBuilder builder = new ScriptSortBuilder(script, sortType).order(sortOrder);

# 设置由spring创建 这里不详细说明了
private Client client;
client.prepareSearch()
...
.addSort(builder)
...

完成!
本人初学es的小白,有啥问题多多交流哦

你可能感兴趣的:(java 如何实现ElasticSearch自定义排序)