elasticsearch java工具类
docker运行elasticsearch
docker pull elasticsearch:7.8.1
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.1
pom
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
配置文件
/**
* ES builder
*/
public class EsConfig {
/**
* es restful client builder
* @return restful client
*/
@Bean
public RestClientBuilder restClientBuilder(){
// 设置IP
HttpHost esHost = new HttpHost("localhost", 9200);
RestClientBuilder restClientBuilder = RestClient.builder(esHost);
// setPassword(restClientBuilder);
// setTImeout(restClientBuilder);
return restClientBuilder;
}
/**
* 设置超时时间
*/
private void setTImeout(RestClientBuilder restClientBuilder) {
restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {
return builder.setConnectTimeout(1000)
.setSocketTimeout(1000);
}
});
}
/**
* 设置ES密码
*/
private void setPassword(RestClientBuilder restClientBuilder) {
// 设置密码
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("userName", "password"));
restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder
.setDefaultCredentialsProvider(credentialsProvider)
.setDefaultIOReactorConfig(
IOReactorConfig.custom()
.setIoThreadCount(4)
.build()
);
}
});
}
}
工具类
public class EsTools {
public static final String INDEX = "search";
private RestClientBuilder restClientBuilder;
private RestHighLevelClient restHighLevelClient;
public EsTools(){
EsConfig esConfig = new EsConfig();
restClientBuilder = esConfig.restClientBuilder();
restHighLevelClient = new RestHighLevelClient(restClientBuilder);
}
/**
* 通过id获取数据
*/
public GetResponse get(String id) throws IOException {
GetRequest request = new GetRequest(INDEX, id);
return restHighLevelClient.get(request, RequestOptions.DEFAULT);
}
/**
* 删除index
*/
public DeleteResponse deleteIndex(String index) throws IOException {
DeleteRequest deleteRequest = new DeleteRequest(INDEX);
return restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
}
/**
* 插入json数据
*/
public IndexResponse insertJson(String content) throws IOException {
IndexRequest indexRequest = new IndexRequest(INDEX);
indexRequest.source(content, XContentType.JSON);
// indexRequest.id("4");
return restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
}
/**
* 批量插入json数据
*/
public BulkResponse insertBatchJson(List<String> contentList) throws IOException{
BulkRequest bulkRequest = new BulkRequest();
IndexRequest indexRequest;
for(String item : contentList){
indexRequest = new IndexRequest(INDEX);
indexRequest.source(item, XContentType.JSON);
bulkRequest.add(indexRequest);
}
return restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
}
public SearchResponse search(QueryBuilder queryBuilder) throws IOException {
SearchRequest request = new SearchRequest();
request.indices(INDEX);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
request.source(searchSourceBuilder);
return restHighLevelClient.search(request, RequestOptions.DEFAULT);
}
public static void main(String[] args) throws IOException {
// 批量插入
String content = "{\n" +
" \"search_id\":1,\n" +
" \"search_type\":\"task\",\n" +
" \"title\":\"保单贷款是什么\",\n" +
" \"descript\":\"保单贷款是以寿险保单的现金价值作担保,从保险公司获得的贷款。这类贷款的一次可贷款金额取决于保单的有效年份;保单签发时被保人的年龄、死亡赔偿金额。\"\n" +
"}";
EsTools esTools = new EsTools();
List<String> contentList = new ArrayList<>();
contentList.add(content);
contentList.add(content);
BulkResponse indexResponse = esTools.insertBatchJson(contentList);
System.out.println(indexResponse.toString());
String query = "贷款";
esTools = new EsTools();
QueryBuilder search = esTools.searchBuild(query);
SearchResponse response = esTools.search(search);
System.out.println(response.toString());
if(response.getHits().getHits() != null) {
Map result = response.getHits().getHits()[0].getSourceAsMap();
System.out.println(result.toString());
}
}
private QueryBuilder searchBuild(String query){
/**
* {
* "query": {
* "bool": {
* "must": [
* {
* "multi_match":{
* "query":"担保",
* "fields": ["title", "descript"]
* }
* },
* {
* "term":{
* "search_type":"batch"
* }
* }
* ]
* }
* }
* }
*/
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("search_type", "task");
boolQueryBuilder.filter(termQueryBuilder);
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(query, "title", "descript");
boolQueryBuilder.must(multiMatchQueryBuilder);
return boolQueryBuilder;
}
}
elasticsearch java工具类的更多相关文章
- java工具类系列 (四.SerializationUtils)
java工具类系列 (四.SerializationUtils) SerializationUtils该类为序列化工具类,也是lang包下的工具,主要用于序列化操作 import java.io.Se ...
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
- 排名前 16 的 Java 工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- 第一章 Java工具类目录
在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- 干货:排名前16的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- Java工具类:给程序增加版权信息
我们九天鸟的p2p网贷系统,基本算是开发完成了. 现在,想给后端的Java代码,增加版权信息. 手动去copy-paste,太没有技术含量. 于是,写了个Java工具类,给Java源文件 ...
- 常用高效 Java 工具类总结
一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...
随机推荐
- 题解 洛谷 P4336 【[SHOI2016]黑暗前的幻想乡】
生成树计数的问题用矩阵树定理解决. 考虑如何解决去重的问题,也就是如何保证每个公司都修建一条道路. 用容斥来解决,为方便起见,我处理时先将\(n\)减了1. 设\(f(n)\)为用\(n\)个公司,且 ...
- .net core 使用 Serilog 作为日志提供者
nuget引入 Serilog.AspNetCore Startup构造函数: public Startup(IConfiguration configuration) { Configuration ...
- React native项目后期调整UI总结
字体 fontSize: 14, marginLeft: 10, marginTop: 2, fontFamily: 'ABBvoiceCNSG-Regular', 布局 paddingHorizon ...
- JVM系列之:String.intern和stringTable
目录 简介 intern简介 intern和字符串字面量常量 分析intern返回的String对象 分析实际的问题 G1中的去重功能 总结 简介 StringTable是什么?它和String.in ...
- laravel 资源控制器方法列表
以 PostController 控制器的每个方法都有对应的请求方式.路由命名.URL.方法名和业务逻辑约定. HTTP请求方式 URL 控制器方法 路由命名 业务逻辑描述 GET post inde ...
- 谁来教我渗透测试——Windows server 2003上部署动态ASP网站
安装网站 我们点击开始/管理工具/管理您的服务器 在服务器配置页面点击添加或删除角色 选择应用程序服务器,点击下一步 将两个工具都勾选上,点击下一步 点击下一步进行安装 等待安装 安装完成后点击完成按 ...
- 使用 expect 重启失败的 git pull/push 操作
问题的提出 最近使用 github 上传.下载项目代码时,经常会卡很久,有时候在命令行打了 git push 然后就去上厕所了,结果等我回来的时候,发现 push 早已经失败了,还得重新提交一下.如果 ...
- functools 中的 reduce 函数基本写法
reduce 返回的往往是一整个可迭代对象的 操作结果 reduce(函数,可迭代对象) 注:lambda x,y 两个参数 2020-05-04
- PHP unset() 函数
unset() 函数用于销毁给定的变量.高佣联盟 www.cgewang.com PHP 版本要求: PHP 4, PHP 5, PHP 7 语法 void unset ( mixed $var [, ...
- 10分钟了解js的宏任务和微任务
熟悉宏任务和微任务以及js(nodejs)事件循环机制,在写业务代码还是自己写库,或者看源码都是那么重要 看了部分文档,自己总结和实践了一下 js中同步任务.宏任务和微任务介绍 同步任务: 普通任务 ...