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工具类的更多相关文章

  1. java工具类系列 (四.SerializationUtils)

    java工具类系列 (四.SerializationUtils) SerializationUtils该类为序列化工具类,也是lang包下的工具,主要用于序列化操作 import java.io.Se ...

  2. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  3. 排名前 16 的 Java 工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  4. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  5. 第一章 Java工具类目录

    在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...

  6. java工具类之按对象中某属性排序

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  7. 干货:排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  8. Java工具类:给程序增加版权信息

       我们九天鸟的p2p网贷系统,基本算是开发完成了.   现在,想给后端的Java代码,增加版权信息.   手动去copy-paste,太没有技术含量. 于是,写了个Java工具类,给Java源文件 ...

  9. 常用高效 Java 工具类总结

    一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...

随机推荐

  1. 题解 洛谷 P4336 【[SHOI2016]黑暗前的幻想乡】

    生成树计数的问题用矩阵树定理解决. 考虑如何解决去重的问题,也就是如何保证每个公司都修建一条道路. 用容斥来解决,为方便起见,我处理时先将\(n\)减了1. 设\(f(n)\)为用\(n\)个公司,且 ...

  2. .net core 使用 Serilog 作为日志提供者

    nuget引入 Serilog.AspNetCore Startup构造函数: public Startup(IConfiguration configuration) { Configuration ...

  3. React native项目后期调整UI总结

    字体 fontSize: 14, marginLeft: 10, marginTop: 2, fontFamily: 'ABBvoiceCNSG-Regular', 布局 paddingHorizon ...

  4. JVM系列之:String.intern和stringTable

    目录 简介 intern简介 intern和字符串字面量常量 分析intern返回的String对象 分析实际的问题 G1中的去重功能 总结 简介 StringTable是什么?它和String.in ...

  5. laravel 资源控制器方法列表

    以 PostController 控制器的每个方法都有对应的请求方式.路由命名.URL.方法名和业务逻辑约定. HTTP请求方式 URL 控制器方法 路由命名 业务逻辑描述 GET post inde ...

  6. 谁来教我渗透测试——Windows server 2003上部署动态ASP网站

    安装网站 我们点击开始/管理工具/管理您的服务器 在服务器配置页面点击添加或删除角色 选择应用程序服务器,点击下一步 将两个工具都勾选上,点击下一步 点击下一步进行安装 等待安装 安装完成后点击完成按 ...

  7. 使用 expect 重启失败的 git pull/push 操作

    问题的提出 最近使用 github 上传.下载项目代码时,经常会卡很久,有时候在命令行打了 git push 然后就去上厕所了,结果等我回来的时候,发现 push 早已经失败了,还得重新提交一下.如果 ...

  8. functools 中的 reduce 函数基本写法

    reduce 返回的往往是一整个可迭代对象的 操作结果 reduce(函数,可迭代对象) 注:lambda x,y 两个参数 2020-05-04

  9. PHP unset() 函数

    unset() 函数用于销毁给定的变量.高佣联盟 www.cgewang.com PHP 版本要求: PHP 4, PHP 5, PHP 7 语法 void unset ( mixed $var [, ...

  10. 10分钟了解js的宏任务和微任务

    熟悉宏任务和微任务以及js(nodejs)事件循环机制,在写业务代码还是自己写库,或者看源码都是那么重要 看了部分文档,自己总结和实践了一下 js中同步任务.宏任务和微任务介绍 同步任务: 普通任务 ...