去年写的一个小工具类,整理了一下分享出来
源设计来源于csdn某篇博文,这个工具类是在那位博主基础上添加了一些功能,找了很久找不到那篇博文地址了,十分抱歉,在此声明一下。如果有找到的朋友可以跟我说,我好把链接加上。
简单介绍
这是一个简陋的es工具类
版本
ElasticSearch 6.0.0
使用
设置mapping
在esFormatMapping.properties
里配置索引的mapping
格式为 索引名=mapping_json
举个例子
test={ "properties": { "name": { "type": "text" }, "num": { "type": "long" }, "begin_date":{ "type": "date", "format": "yyyy-MM-dd hh:mm:ss" } } }
创建索引
String index = "test";
String type = "testtype";
ElasticSearchService elasticSearchService = new ElasticSearchService();
elasticSearchService.createIndex(index, type);
加入数据
一共有四种添加数据的方式
- insertData 单条插入 不指定id
- inserData 单挑插入 指定id
- bulkInsertData 批量插入 大数据量下可能会漏数据
- bulkInsertDataProcesser 批量插入 使用了es自带的processor 大数据量下基本不会漏掉数据 推荐使用
调用bulkInsertDataProcesser
String index = "test";
String type = "testtype";
ElasticSearchService elasticSearchService = new ElasticSearchService();
Map<String,Object> data = new HashMap<String,Object>();
Map<String,Object> param = new HashMap<String,Object>();
param.put("name", "张三");
param.put("num", 1);
param.put("begin_date", "2019-02-11 10:10:10");
Map<String,Object> param1 = new HashMap<String,Object>();
param1.put("name", "张三四");
param1.put("num", 2);
param1.put("begin_date", "2019-02-10 06:06:06");
data.put(DigestUtils.md5Hex(JSON.toJSONString(param)), param);
data.put(DigestUtils.md5Hex(JSON.toJSONString(param1)), param1);
ElasticSearchService.bulkInsertDataProcesser(index, type, data);
查询
条件搜索
term
ESQueryBuilderConstructor esbc = new ESQueryBuilderConstructor();
ESQueryBuilders esb = new ESQueryBuilders();
esb.term("name", "张三");
esbc.must(esb);
Map<String,Object> data = ess.search(index, type, esbc, new String[]{"name"});
data.forEach((key,value)->{
System.out.println(key);
System.out.println(value);
});
ESQueryBuilderConstructor 分为must,should,mustNot
must 必须匹配 and
should 可匹配 or
mustNot 必不匹配 非 and
match
ESQueryBuilderConstructor esbc = new ESQueryBuilderConstructor();
ESQueryBuilders esb = new ESQueryBuilders();
esb.match("name", "张三");
esbc.must(esb);
Map<String,Object> data = ess.search(index, type, esbc, new String[]{"name"});
data.forEach((key,value)->{
System.out.println(key);
System.out.println(value);
});
后面跟es提供的类型一样,请参阅es查询方式,这里就不一一举例了
分组
ESQueryBuilderConstructor esbc = new ESQueryBuilderConstructor();
ESQueryBuilders esb = new ESQueryBuilders();
ESGroupby esgb = new ESGroupby("num");
esgb.desc(2);
esbc.setEsGroupby(esgb);
desc,esc中 1:by_count
2:by_key
分组日期需要增加一段
esgb.setSearchWay(searchWay, format, interval);
searchWay 默认为1
1:search_term
,2:search_date
分组统计
ESQueryBuilderConstructor esbc = new ESQueryBuilderConstructor();
ESQueryBuilders esb = new ESQueryBuilders();
ESGroupby esgb = new ESGroupby("num");
esgb.min("num", "min");
esbc.setEsGroupby(esgb);
数据迁移
elasticSearchService.getSearchDataByScrolls(indexFrom, indexTo, type);
indexFrom: 源索引
indexTo: 目标索引
type: 共用的类型名 必须相同
删除索引(数据)
- deleteIndex 单条删除
elasticSearchService.deleteIndex(index);
- delByQuery
elasticSearchService.delByQuery(index,map,notmap);
index 索引名
map 暂时只支持 must->term
notMap 同理 mustNot->term
将查询到的数据删除