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地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个开源的分布式搜索和分析引擎,它被广泛应用于全文搜索、日志分析、数据可视化等领域。Elasticsearch提供了丰富的API和功能,可以方便地进行数据索引、搜索、聚合和分析。 在使用Elasticsearch时,可以使用Java编写工具类来简化与Elasticsearch的交互。下面是一个简单的Elasticsearch工具类的示例: ```java import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; public class ElasticsearchUtils { private RestHighLevelClient client; public ElasticsearchUtils() { client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); } public SearchResponse search(String index, String field, String keyword) throws IOException { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery(field, keyword)); sourceBuilder.sort(field, SortOrder.DESC); SearchRequest searchRequest = new SearchRequest(index); searchRequest.source(sourceBuilder); return client.search(searchRequest, RequestOptions.DEFAULT); } public void close() throws IOException { client.close(); } } ``` 上述示例中的工具类使用了ElasticsearchJava高级客户端(RestHighLevelClient)来与Elasticsearch进行交互。其中,`search`方法用于执行搜索操作,`close`方法用于关闭与Elasticsearch的连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值