java的elasticsearch搜索引擎工具类

去年写的一个小工具类,整理了一下分享出来
源设计来源于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
将查询到的数据删除

这里是git地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值