docker安装es8.x及elasticSearch8部分api使用

docker中安装es8
1、es8的tar下载地址: tar包下载地址)
2、docker load -i es-name
3、docker run -d --name elasticsearch-8.6.2 -e ES_JAVA_OPTS=“-Xms256m -Xmx256m” -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:8.6.2
4、8开始以后不支持直接使用http方式访问es:
4.1、cd /usr/share/elasticsearch/config
4.2、 vi elasticsearch.yml将xpack.security.enabled: false,或者直接将该配置下的所有enable改为false
解决docker中vi命令无效时修改文件内容麻烦的问题
1、cat > 需要修改的文件名称 << EOF
2、将需要修改的内容全部复制粘贴到shell中在对内容进行修改, 因为部分内容修改到该文件时该内容将会覆盖原有文件中 是所有内容
3、最后EOF结束修改,修改完成

自动配置类,用于注入es高级客户端及低级客户端用于操作Api

@Configuration
public class RestAutoConfigure {private static final Logger logger = LoggerFactory.getLogger(RestAutoConfigure.class);@Value("${spring.elasticsearch.rest.uris:}")private String elasticsearchNodes;/*** Description 低级客户端* @date 2023/8/13 20:11* @param:* @return: org.elasticsearch.client.RestClient*/@Beanpublic RestClient restClient() {HttpHost[] httpHosts = getHttpHosts(elasticsearchNodes);if (httpHosts != null && httpHosts.length > 0) {RestClientBuilder http = RestClient.builder(httpHosts);return http.build();}return null;}/*** Description 阻塞的 Java 客户端* @date 2023/8/13 20:11* @param:* @return: co.elastic.clients.elasticsearch.ElasticsearchClient*/@Bean@Primarypublic ElasticsearchClient restHighLevelClient() {HttpHost[] httpHosts = getHttpHosts(elasticsearchNodes);if (httpHosts != null && httpHosts.length > 0) {// Create the RestClientRestClient restClient = RestClient.builder(httpHosts).build();// Create the transport with a Jackson mapperRestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());// create the API clientreturn new ElasticsearchClient(transport);}return null;}/*** Description 获取httpHosts** @date 2022/7/15 9:42* @param: elasticsearchNodes* @return: org.apache.http.HttpHost[]*/private HttpHost[] getHttpHosts(String elasticsearchNodes) {if (StrUtil.isNotEmpty(elasticsearchNodes)) {// 逗号分割多个es路径String[] elasticsearchNode = elasticsearchNodes.split(",");HttpHost[] httpHosts = new HttpHost[elasticsearchNode.length];int index = 0;HttpHost http;for (String s : elasticsearchNode) {if (s.contains("http://")) {String[] split = s.split("://");String schema = split[0];String ipPort = split[1];String ip = ipPort.split(":")[0];String port = ipPort.split(":")[1];http = new HttpHost(ip, Integer.parseInt(port), schema);} else {String ip = s.split(":")[0];String port = s.split(":")[1];http = new HttpHost(ip, Integer.parseInt(port), "http");}httpHosts[index] = http;index++;}return httpHosts;}return null;}
}

一般查询设置,针对指定索引查询

private SearchRequest.Builder getSearchRequest(Object[] indices, String[] types) {if (null == indices) {return new SearchRequest.Builder();}SearchRequest.Builder searchRequestBuilder = new SearchRequest.Builder();if (indices.length > 0) {/*筛选出指定的zipkin:span所引内容   处理当天的链路信息 索引格式:zipkin-span-2022-08-02 */List<String> zipkinIndex = new ArrayList<>();for (Object index : indices) {if (((String) index).contains(Constant.SPAN)) {zipkinIndex.add((String) index);}}// 分片响应超时时间设置searchRequestBuilder.timeout("10s");/*集合转为数组 ----指定搜索的文档类型*/searchRequestBuilder.index(zipkinIndex);}// 每个searchRequestBuilder对象build()后意味着当前对象以及结束,重新获取return searchRequestBuilder;}/*** 获取所有日志索引名称*/public String[] getIndices() {String[] indices = new String[0];try {Request request = new Request(Constant.GET, Constant.INDICES_URL);//发送获取所有索引名称的请求Response response = restClient.performRequest(request);String responseBody = EntityUtils.toString(response.getEntity());//从响应报文中提取索引名称  除去返回值中第一个索引名称为index的索引该值为es中的默认索引名responseBody = responseBody.substring(responseBody.indexOf('\n') + 1);/*将所有索引名称分隔出来*/indices = responseBody.split("\n");} catch (IOException e) {logger.error("获取所有日志索引名称异常:", e);}return indices;}

bool查询用例

public static List<Hit<Object>> getOriginEsTraceLinkData(Map<String, Object> typeMap, Map<String, Object> condition) {/*临时存储数据集合*/List<Hit<Object>> tempSearches = new ArrayList<>();try {LinkSearchBuilder.builder(typeMap);long endMillis = condition.get(Constant.END_TS) == null ? 0 : (long) condition.get(Constant.END_TS);long lookBack = condition.get(Constant.LOOK_BACK) == null ? 0 : (long) condition.get(Constant.LOOK_BACK);long beginMillis = Math.max(endMillis - lookBack, EARLIEST_MS);String belApp = (String) condition.get(Constant.BEL_APP);String belLogy = (String) condition.get(Constant.BEL_LOGY);String belSer = (String) condition.get(Constant.BEL_SER);String traceId = (String) condition.get(Constant.TRACE_ID);Integer limit = (Integer) condition.get(Constant.LIMIT);long minDuration = condition.get(Constant.MIN_DURATION) == null ? 0 : (long) condition.get(Constant.MIN_DURATION);long maxDuration = condition.get(Constant.MAX_DURATION) == null ? 0 : (long) condition.get(Constant.MAX_DURATION);limit = (limit != null) ? limit : 10;// bool查询BoolQuery.Builder boolQueryBuilder = new BoolQuery.Builder();// 根据不同的条件构建Queryif (beginMillis > 0 && endMillis > 0) {Query rangeQueryBuilder = RangeQuery.of(builder -> builder.field(Constant.TIMESTAMP_MILLIS).gt(JsonData.of(beginMillis)).lt(JsonData.of(endMillis)))._toQuery();boolQueryBuilder.filter(rangeQueryBuilder);}// tags字段下的查询不生效,tags字段对应的es模板信息不可查询if (StrUtil.isNotEmpty(belApp)) {Query belAppTermQueryBuilder = TermQuery.of(builder -> builder.field("belApp").value(belApp))._toQuery();boolQueryBuilder.filter(belAppTermQueryBuilder);}if (StrUtil.isNotEmpty(belLogy)) {Query belLogyTermQuery = TermQuery.of(builder -> builder.field("belLogy").value(belLogy))._toQuery();boolQueryBuilder.filter(belLogyTermQuery);}if (StrUtil.isNotEmpty(belSer)) {Query belSerTermQuery = TermQuery.of(builder -> builder.field("localEndpoint.serviceName").value(belSer))._toQuery();boolQueryBuilder.filter(belSerTermQuery);}if (StrUtil.isNotEmpty(traceId)) {Query traceIdTermQuery = TermQuery.of(builder -> builder.field("traceId").value(traceId))._toQuery();boolQueryBuilder.filter(traceIdTermQuery);}if (minDuration > 0) {Query durationQueryBuilder = RangeQuery.of(builder -> builder.field(Constant.DURATION).gt(JsonData.of(0)).lt(JsonData.of(minDuration)))._toQuery();boolQueryBuilder.filter(durationQueryBuilder);}searchRequestBuilder.size(limit);// 封装查询searchRequestBuilder.query(boolQueryBuilder.build()._toQuery());SearchRequest searchRequest = searchRequestBuilder.build();System.out.println("es查询语句:" + searchRequest.toString());// 查询结果SearchResponse<Object> searchResponse = restHighLevelClient.search(searchRequest, Object.class);if (searchResponse.hits().total() != null && searchResponse.hits().total().value() > 0) {/*获取到数据*/List<Hit<Object>> searchHits = searchResponse.hits().hits();/*将第一次获取的数据添加到临时集合中*/tempSearches.addAll(searchHits);}} catch (Exception e) {logger.info("es数据链路信息查询异常", e);}return tempSearches;}

scroll查询用例

 public static List<SpanSource> getAllData(Map<String, Object> typeMap) {LinkSearchBuilder.builder(typeMap);List<SpanSource> result = new ArrayList<>();List<String> scrollIds = new ArrayList<>();long startMillis = 0;long endMillis = 0;String belLogy = null;try {if (CollectionUtil.isNotEmpty(typeMap)) {startMillis = typeMap.get(Constant.FROM_TIME) == null ? 0 : (long) typeMap.get(Constant.FROM_TIME);endMillis = typeMap.get(Constant.TO_TIME) == null ? 0 : (long) typeMap.get(Constant.TO_TIME);belLogy = (String) typeMap.get(Constant.BEL_LOGY);}/*每次查询分页大小设置*/searchRequestBuilder.size(200);// 初始化scrollId时长searchRequestBuilder.scroll(new Time.Builder().time(SCROLL_TIME).build());/*从数据库中获取当前创建时间*/if ((startMillis > 0 && endMillis > 0) && (startMillis != endMillis)) {// 多条件boolean查询BoolQuery.Builder boolQueryBuilder = new BoolQuery.Builder();/*范围查询  处理完成的数据的最近时间之后的所有数据进行查询该范围之后的数据*/long finalStartMillis = startMillis;long finalEndMillis = endMillis;Query rangeQueryBuilder = RangeQuery.of(builder -> builder.field(Constant.TIMESTAMP_MILLIS).gt(JsonData.of(finalStartMillis)).lt(JsonData.of(finalEndMillis)))._toQuery();boolQueryBuilder.filter(rangeQueryBuilder);String finalBelLogy = belLogy;Query belAppTermQueryBuilder = TermQuery.of(builder -> builder.field("belLogy").value(finalBelLogy))._toQuery();boolQueryBuilder.filter(belAppTermQueryBuilder);searchRequestBuilder.query(boolQueryBuilder.build()._toQuery());} else {// 查询所有值searchRequestBuilder.query(QueryBuilders.matchAllQuery()._toQuery());}/*执行查询*/SearchResponse<Object> searchResponse = restHighLevelClient.search(searchRequestBuilder.build(), Object.class);if (searchResponse.hits().hits().size() > 0) {/*临时存储数据集合*/List<Hit<Object>> tempSearches = new ArrayList<>();/*获取scrollId*/String scrollId = searchResponse.scrollId();scrollIds.add(scrollId);/*获取到数据*/List<Hit<Object>> searchHits = searchResponse.hits().hits();/*将第一次获取的数据添加到临时集合中*/tempSearches.addAll(searchHits);/*滚动查询*/while (searchHits.size() > 0) {ScrollRequest.Builder builder = new ScrollRequest.Builder();// 初始时的scrollId值builder.scrollId(scrollId);// scroll查询时scrollId的有效时长值必须设置builder.scroll(new Time.Builder().time(SCROLL_TIME).build());//响应必须是上面的响应对象,需要对上一层进行覆盖ScrollResponse<Object> scrollResult = restHighLevelClient.scroll(builder.build(), Object.class);scrollId = scrollResult.scrollId();scrollIds.add(scrollId);searchHits = scrollResult.hits().hits();// 将数据添加到存储的集合中tempSearches.addAll(searchHits);}//清除滚动clearScrollIds(restHighLevelClient, scrollIds);}/**** Description scroll滚动查询,es默认是存储500条scroll_id,* 在一个scroll生存时间内创建超过500条继续使用滚动查询时,会报错.* @date 2022/7/19 9:53* @param: client* @param: scrollIds* @return: boolean*/private static boolean clearScrollIds(ElasticsearchClient client, List<String> sIds) {//清除滚动,否则影响下次查询ClearScrollRequest.Builder clearScrollRequest = new ClearScrollRequest.Builder();clearScrollRequest.scrollId(sIds);try {client.clearScroll(clearScrollRequest.build());return true;} catch (IOException e) {return false;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接&#xff1a;https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣&#xff0c;从字面的意思可以理解&…

Spring练习---28 (用户表和角色表分析,角色列表展示,角色层和Dao层的设置,页面展示操作)

84、下面进入我们的业务层面&#xff0c;进入我们的业务层面我们先分析一个东西&#xff0c;我们要分析用户和角色的关系&#xff0c;因为我们只有在分析完用户和角色之间的关系后&#xff0c;我们才知道表的关系&#xff0c;实体的关系 85、现在我们先画一张表&#xff0c;分析…

从FLIR热像仪图像中读取温度和原始照片: Python处理与应用的深入解析

第一部分:FLIR热像仪图像简介与Python环境准备 热像仪是一种可以检测辐射热量的设备,并将其转换为可视图像。FLIR(Forward Looking Infrared)热像仪是市面上的主导品牌之一,被广泛应用于各种场景,例如医学、军事和消费电子产品。其输出的图像不仅仅是我们看到的彩色或灰…

cUrl的介绍和基本使用

cURL 如果你在开发接口的时候&#xff0c;需要调试。那么cUrl将是你必备的技能。也许你用过postman,但这个未免太重量级了。curl将会是你最佳轻量级&#xff0c;调试接口的工具&#x1f600; 1.Curl函数的基本选项✨ 1.1 --request和 -x —request 和 -X 指定与HTTP服务器通信…

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解 一、背景二、环境硬件信息软件信息 三、FE恢复3.1 异常日志3.2 获取当前ip3.3 重置ip信息3.4 重置元数据记录3.5 元数据模式恢复3.6 重置fe集群节点3.7 关闭元数据模式重启fe 四、BE恢复4.1 获取当前ip4.2 重置ip信息4.3 重置be集群节点 一、背景 …

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…

WordPress用于您的企业网站的优点和缺点

如今&#xff0c;WordPress 被广泛认为是一个可靠、可扩展且安全的平台&#xff0c;能够为商业网站提供支持。然而&#xff0c;许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点&#xff0c;您可以确定世界上最受欢…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

软件测试-测试策略

版本1 测试策略 目录 版本1​​​​​​​测试策略 版本2测试策略 一、版本分析 测试-----6天 预发----2天 1、XXX业务1 2、XXX业务2 3、XXX业务3 二、测试策略 测试类型分析方向测试目标及用例参考是否需要测试测试结论备注功能测试对比测试用例和策划文档&#xff0c;评估…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

数据库设计规范

数据库设计&#xff08;Database Design)是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库及其应用系统&#xff0c;使之能够有效地存储数据&#xff0c;满足各种用户的应用需求&#xff08;信息要求和处理要求&#xff09;。 一、数据库设…

Android Studio导入项目需要做的一些配置

点击项目结构 选择本地安装的SDK、NDK目录 选择java版本 重新加载项目 Clean Project Rebuild Project 选择要构建的版本 可选debug和release 打包apk安装包 打包完成&#xff0c;就可以安装到安卓手机了

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…

Restful架构简单了解

Restful Rest全称representational status transfer 表述性状态转移。 原则 资源与URI URI既可以看成是资源的地址&#xff0c;也可以看成是资源的名称。如果某些信息没有使用URI来表示&#xff0c;那它就不能算是一个资源&#xff0c; 只能算是资源的一些信息而已。URI的设计…

无则插入有则更新(PostgreSQL,MySQL,Oracle、SqlServer)

无则插入有则更新 PostgreSQL 无则插入有则更新 conflict(带有唯一性约束的字段)&#xff0c;根据此字段判断是更新还是插入 INSERT INTO student(id,name,sex) VALUES(1, 小明, 男) ON conflict (id) DO UPDATE SET id 1,name 小明,sex 男;无则插入有则不做操作 INSERT I…

Java虚拟机(JVM):堆溢出

一、概念 Java堆溢出&#xff08;Java Heap Overflow&#xff09;是指在Java程序中&#xff0c;当创建对象时&#xff0c;无法分配足够的内存空间来存储对象&#xff0c;导致堆内存溢出的情况。 Java堆是Java虚拟机中用于存储对象的一块内存区域。当程序创建对象时&#xff0c…

Maven之JDK编译问题

IDEA Maven 默认使用 JDK 1.5 编译问题 IDEA 在「调用」maven 时&#xff0c;IDEA 默认都会采用 JDK 1.5 编译&#xff0c;不管你安装的 JDK 版本是 JDK 7 还是 JDK 8 或者更高。这样一来非常不方便&#xff0c;尤其是时不时使用 JDK 7/8 的新特性时。如果使用新特性&#xff…

C# Windows登录界面进行截图,控制鼠标键盘等操作实现(三)

在Windows登录界面进行截图&#xff0c;目前尝试到的以下的截图方法可以截取到图&#xff0c;其它的方式要么卡住&#xff0c;要么截出来是黑屏的&#xff0c;直接上代码&#xff1a; /// <summary>使用Graphics方式捕获桌面截图(效率低于DesktopCapture&#xff0c;主要…

SQLite的命令用法

学习数据库直达网站 https://www.runoob.com/sqlite/sqlite-tutorial.html&#xff08;菜鸟教程&#xff09; 这里只分享&#xff0c;基础操作&#xff0c;数据库创建打开……等等 用到查菜鸟教程即可 文章目录 学习数据库直达网站创建一个数据库方式1方式2 创建一个表格插入一…