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

这篇具有很好参考价值的文章主要介绍了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
     */
    @Bean
    public 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
    @Primary
    public ElasticsearchClient restHighLevelClient() {
        HttpHost[] httpHosts = getHttpHosts(elasticsearchNodes);
        if (httpHosts != null && httpHosts.length > 0) {
            // Create the RestClient
            RestClient restClient = RestClient.builder(httpHosts).build();
            // Create the transport with a Jackson mapper
            RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
            // create the API client
            return 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();

            // 根据不同的条件构建Query
            if (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查询用例文章来源地址https://www.toymoban.com/news/detail-663341.html

 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;
        }
    }

到了这里,关于docker安装es8.x及elasticSearch8部分api使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker安装部署elasticsearch8.2.3

    配置系统 安装服务启动服务

    2024年02月13日
    浏览(34)
  • ElasticSearch8.8 Docker local安装(一)

    ES(ElasticSearch) 的安装教程网上比较多,但是基本都是8.0以前版本,8.0以后的版本主要默认支持https加密了 连接上有一些不太一样 尤其用java连接的时候,因此再做一个报告避免一些坑。 前提linux操作系统(我使用虚拟机VirtualBox安装),以及最新docker  elastic 是创建的网络名称 可以自

    2024年02月12日
    浏览(31)
  • Elasticsearch--01.ES8.1.0集群搭建

    一、搭建ES集群 1.集群环境安装 本集群使用Centos7.5操作系统,2G 2C 60G(如果主机好点的节点配置可以搞高点) 分别修改三台集群服务器配置:  1.1.修改系统配置文件/etc/security/limits.conf 1.2.修改/etc/sysctl.conf 1.3.# sysctl -p  重新加载 集群服务器如下: 机器地址 节点名称 节点角

    2024年02月12日
    浏览(27)
  • ElasticSearch第二章(ES8.X的使用)

    目录 1:ES的使用(DSL创建索引库-相当于表) 1.1:什么是索引库 1.2:索引库的增删改查使用 2:ES的使用(DSL操作文档-相当于数据) 2.1:什么是文档 2.2:文档的增删改查 3:java代码开发 3.1:准备工作 3.2:代码操作索引(也就是表的增删改查) 3.3:代码操作文档(也就是数

    2024年03月23日
    浏览(34)
  • 手把手教程:Linux使用docker安装ElasticSearch8.2.3和配套Kibana

    前言 之前用的es一直是比较老的版本,最近做项目的时候觉得该用一个稍微新一点的了,就琢磨了一下新版本的使用,顺便整理下安装流程。之所以要整理这个,是因为新版本的ES跟老版本的安装过程差别太大了,特别是要配套Kibana的情况下。 开放端口 在云服务器控制台配置

    2024年02月11日
    浏览(35)
  • ES8 向量搜索(knn-search)java-api 实践

    官方文档-knn-search kNN搜索 k-nearest neighbor (kNN)搜索找到与查询向量最近的k个向量,如通过相似度计算。 kNN的常见用例包括: 基于自然语言处理(NLP)算法的相关性排序 产品推荐和推荐引擎 图像或视频的相似性搜索 要运行kNN搜索,您必须能够将数据转换为有意义的向量值

    2024年02月12日
    浏览(30)
  • 【ES】elasticsearch8.3.3

    这里仅实践操作并根据实际问题进行记录笔记。 我们需要在自己的电脑上安装好 Docker Desktop。接着我们运行如下的命令:出现两个异常,一个是需要使用 winpty 因为我使用win的docker desktop,另外一个问题是docker启动elasticsearch ERROR: Elasticsearch did not exit normally - check the logs at xx

    2024年02月10日
    浏览(28)
  • java与es8实战之三:Java API Client有关的知识点串讲

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇是《java与es8实战》系列的第三篇,将一些重要的知识点在这里梳理清楚,为后面的实践奠定基础 一共有七个与Java API Client有关的重要知识点 关于namespace:每个feature都有自己的package 命名规则:

    2024年02月11日
    浏览(30)
  • es8.8 集群安装笔记

    本次安装使用centos8 3节点安装: 192.168.182.142 192.168.182.143 192.168.182.144 官网 可以查看详细的安装,安装步骤比较简单 https://www.elastic.co/guide/en/elasticsearch/reference/8.8/rpm.html#rpm-repo 访问需要用https https://127.0.0.1:9200/ 默认用户 elastic 密码就是安装的时候打印到屏幕上的密码 8.8 使用

    2024年02月13日
    浏览(35)
  • springboo整合elasticSearch8 java client api

    官方文档: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/connecting.html gradle maven 若无密码,可以使用下面方式: 使用es自动设置的mapping 设置mappings Doc是自定义实体类 比如 select * from doc where user_id in(1,2,3); 方式一: 方式二: 方式三:

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包