热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA利用RestHighLevelClient设计接口实现es的基本增删改查及登录认证、中文分词的结果返回

背景之前写过一篇《java使用transportClient连接elasticsearch并做接口实现增删改查ES6.4.3版本》的文章,在项目中可以作为基本的使用。

背景

之前写过一篇《java使用transportClient连接elasticsearch并做接口实现增删改查ES6.4.3版本》的文章,在项目中可以作为基本的使用。但是没有权限验证及分词的处理。在资料查找中,发现TransportClien客户端工具会在之后的版本中作废。且实践中6.4.3版本无法对账密验证(可能方式不对)。遂改造成了RestHighLevelClient客户端实现之前的功能。主要逻辑都差不多。这里做个整理

  1. 引入相关包
  2. 定义接口
  3. 接口实现
  4. es对象的实例化处理
  5. 分词测试

pom配置相关包
我这里把涉及到的核心包整理,方便拷贝


org.springframeworkspring-beans3.1.2.RELEASEcom.alibabafastjson1.2.28junitjunit3.8.1testorg.elasticsearchelasticsearch6.4.3org.elasticsearch.clienttransport6.4.3org.elasticsearchelasticsearch-core6.4.3compileorg.elasticsearchelasticsearch-secure-sm6.4.3compileorg.elasticsearchelasticsearch-x-content6.4.3compileorg.apache.lucenelucene-core7.4.0compileorg.apache.lucenelucene-analyzers-common7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-backward-codecs7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-grouping7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-queriesorg.apache.lucenelucene-highlighter7.4.0compileorg.apache.lucenelucene-analyzers-commonorg.apache.lucenelucene-coreorg.apache.lucenelucene-joinorg.apache.lucenelucene-memoryorg.apache.lucenelucene-queriesorg.apache.lucenelucene-join7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-memory7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-misc7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-queries7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-queryparser7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-queriesorg.apache.lucenelucene-sandboxorg.apache.lucenelucene-sandbox7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-spatial7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-spatial-extras7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-spatial3dio.sgrs2-geometry-library-javaorg.locationtech.spatial4jspatial4jorg.apache.lucenelucene-spatial3d7.4.0compileorg.apache.lucenelucene-coreorg.apache.lucenelucene-suggest7.4.0compileorg.apache.lucenelucene-analyzers-commonorg.apache.lucenelucene-coreorg.elasticsearchelasticsearch-cli6.4.3compilecom.carrotsearchhppc0.7.1compilejoda-timejoda-time2.10compilecom.tdunningt-digest3.2compileorg.hdrhistogramHdrHistogram2.1.9compileorg.locationtech.spatial4jspatial4j0.7compiletrueorg.locationtech.jtsjts-core1.15.0compiletrueorg.apache.logging.log4jlog4j-api2.11.1compileorg.apache.logging.log4jlog4j-core2.11.1compileorg.apache.logging.log4jlog4j-apitrueorg.apache.logging.log4jlog4j-1.2-api2.11.1compileorg.apache.logging.log4jlog4j-coreorg.apache.logging.log4jlog4j-apitrueorg.elasticsearchjna4.5.1compile org.elasticsearch.clientelasticsearch-rest-high-level-client6.4.2 org.elasticsearch.clientelasticsearch-rest-client6.4.2org.springframeworkspring-test3.1.2.RELEASEtestorg.springframeworkspring-context3.1.2.RELEASEtestjunitjunit4.12testorg.slf4jslf4j-api1.7.7

接口定义
和之前相比,多了个分词结果返回接口

package com.kaishiba.elasticsearch.service;import java.util.List;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;public abstract interface ElasticsearchService
{public abstract RestHighLevelClient getRestHighLevelClient()throws Exception;public abstract SearchResponse getSearchResult(SearchRequest paramSearchRequest)throws Exception;public abstract SearchResponse getSearchResult(String paramString1, String paramString2, SearchSourceBuilder paramSearchSourceBuilder)throws Exception;public abstract SearchResponse getSearchResult(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, String paramString3, QueryBuilder paramQueryBuilder, AggregationBuilder paramAggregationBuilder)throws Exception;public abstract boolean updateIndexRequest(String paramString1, String paramString2, String paramString3, String paramString4)throws Exception;public abstract boolean deleteIndex(String paramString1, String paramString2, String paramString3)throws Exception;public abstract List getAnalyze(String paramString)throws Exception;
}

接口实现及认证设置

package com.kaishiba.elasticsearch.service.impl;import java.util.ArrayList;
import java.util.List;import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.InitializingBean;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.kaishiba.elasticsearch.service.ElasticsearchService;/*** es通用化组件方法实现* @author chenhailong* @date 2019年8月12日 上午9:59:23*/
public class ElasticsearchServiceImplimplements ElasticsearchService, InitializingBean
{private String ip;private int port;private String userName;private String userPwd;private RestHighLevelClient client;public String getIp(){return this.ip;}public void setIp(String ip){this.ip = ip;}public int getPort(){return this.port;}public void setPort(int port){this.port = port;}public String getUserPwd(){return this.userPwd;}public void setUserPwd(String userPwd){this.userPwd = userPwd;}public String getUserName(){return this.userName;}public void setUserName(String userName){this.userName = userName;}public RestHighLevelClient getRestHighLevelClient(){return this.client;}public SearchResponse getSearchResult(SearchRequest request)throws Exception{return this.client.search(request, RequestOptions.DEFAULT);}public SearchResponse getSearchResult(String indexName, String typeName, SearchSourceBuilder searchSourceBuilder)throws Exception{return this.client.search(new SearchRequest().indices(new String[] { indexName }).types(new String[] { typeName }).source(searchSourceBuilder), RequestOptions.DEFAULT);}public SearchResponse getSearchResult(String indexName, String typeName, Integer page, Integer pageSize, String sortDesc, QueryBuilder queryBuilder, AggregationBuilder aggregationBuilder)throws Exception{return this.client.search(new SearchRequest().indices(new String[] { indexName }).types(new String[] { typeName }).source(new SearchSourceBuilder().query(queryBuilder).from(page.intValue() * pageSize.intValue()).size(pageSize.intValue()).sort(sortDesc, SortOrder.DESC).aggregation(aggregationBuilder)), RequestOptions.DEFAULT);}public boolean updateIndexRequest(String indexName, String typeName, String id, String jsonStr)throws Exception{IndexRequest createRequest = new IndexRequest(indexName, typeName, id);createRequest.source(jsonStr, XContentType.JSON);UpdateRequest updateRequest = new UpdateRequest(indexName, typeName, id);updateRequest.doc(jsonStr, XContentType.JSON).upsert(createRequest);UpdateResponse updateResponse = this.client.update(updateRequest, RequestOptions.DEFAULT);if ((updateResponse.getResult().getLowercase().equals("updated")) || (updateResponse.getResult().getLowercase().equals("created"))) {return true;}return false;}public boolean deleteIndex(String indexName, String typeName, String id)throws Exception{DeleteRequest deleteRequest = new DeleteRequest(indexName, typeName, id);DeleteResponse deleteResponse = this.client.delete(deleteRequest, RequestOptions.DEFAULT);if (deleteResponse.getResult().getLowercase().equals("deleted")) {return true;}return false;}public List getAnalyze(String text)throws Exception{List list = new ArrayList();text = text.length() > 100 ? text.substring(0, 100) : text;Request request = new Request("GET", "_analyze");JSONObject entity = new JSONObject();entity.put("analyzer", "ik_max_word");entity.put("text", text);request.setJsonEntity(entity.toJSONString());Response response = this.client.getLowLevelClient().performRequest(request);JSONObject tokens = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));JSONArray arrays = tokens.getJSONArray("tokens");for (int i = 0; i }

spring bean配置如下




写个测试类如下
注:ik分词需要下载对应版本的分词插件‘elasticsearch-analysis-ik-6.4.2’,装好之后可以进行如下操作

/** Copyright 2016 kaistart.com All right reserved. This software is the* confidential and proprietary information of kaistart.com ("Confidential* Information"). You shall not disclose such Confidential Information and shall* use it only in accordance with the terms of the license agreement you entered* into with kaistart.com.*/
package com.kaishiba.elasticsearch.test;import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.kaishiba.elasticsearch.service.ElasticsearchService;/*** @author chenhailong* @date 2019年8月12日 上午10:07:11 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/spring-es.xml"})
public class App {@Autowiredprivate ElasticsearchService es;@Testpublic void getInfo() {try {List ls = es.getAnalyze("中华人民共和国合同法");for(String s: ls) {System.out.println("listing key :" + s);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

返回结果如下:

listing key :中华人民共和国
listing key :中华人民
listing key :中华
listing key :华人
listing key :人民共和国
listing key :人民
listing key :共和国
listing key :共和
listing key :国合
listing key :合同法
listing key :合同
listing key :法

当修改为错误的账号密码之后,运行以下代码依然正常

@Test
public void get() {
Request request = new Request("GET","/");
try {System.out.println(es.getRestHighLevelClient().getLowLevelClient().performRequest(request));
} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();
}
}# Response{requestLine=GET / HTTP/1.1, host=http://127.0.0.1:9200, response=HTTP/1.1 200 OK}

这是由于没有安装 x-pack插件,参考详情查看
《单独安装elasticsearch6.x并破解xpack开启SSL认证进行测试使用》

《elasticsearch6.4.2安装x-pack安全认证后,java如何使用transportclient连接/resthighlevelclient连接》


推荐阅读
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 在Java应用程序中调用`response.getStatus()`方法时遇到了`NoSuchMethodError`异常,经过分析,初步判断为依赖冲突问题。通过检查项目依赖树发现,当前项目版本与某些库的版本不兼容,导致该方法无法被正确识别。建议通过更新相关依赖版本或使用依赖管理工具(如Maven或Gradle)来解决此问题,确保所有依赖项版本一致且兼容。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • 如何正确配置Log4j以优化日志记录效果? ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
author-avatar
qzq9037091
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有