Java SpringBoot整合elasticsearch 7.17相关问题记录

这篇具有很好参考价值的文章主要介绍了Java SpringBoot整合elasticsearch 7.17相关问题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

话不多说直接上代码,首先关注点Springboot相关ES相关的版本对应
Java SpringBoot整合elasticsearch 7.17相关问题记录
找到对应的版本号,我这里对应7.17.1 对应的springboot版本 2.3.* 即可
Java SpringBoot整合elasticsearch 7.17相关问题记录

Java SpringBoot整合elasticsearch 7.17相关问题记录
上图为Springboot相关依赖

 <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.3.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>7.17.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>7.17.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>elasticsearch</artifactId>
                    <groupId>org.elasticsearch</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>elasticsearch-core</artifactId>
                    <groupId>org.elasticsearch</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    1.2创建连接
    es6.0以后废除 ElasticsearchTemplate
    原来9300,连接方式 换成了9200,yml/properties 切记配置文件中端口号要改成9200,9300不支持

Java SpringBoot整合elasticsearch 7.17相关问题记录

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import lombok.extern.slf4j.Slf4j;
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.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Value("${http.port}")
    private String httpPort;
两种连接方式,用那种都可以

## **第一种:**

     @Bean
    public ElasticsearchClient elasticsearchClient() {
        HttpHost[] httpHosts = getHttpHosts();
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //账号密码
        credentialsProvider.setCredentials(
                AuthScope.ANY, new UsernamePasswordCredentials("name", "password"));

        RestClientBuilder builder = RestClient.builder(httpHosts)
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));

        RestClient restClient = builder.build();
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());
        return new ElasticsearchClient(transport);
    }
**

## 第二种:

**    
  @Bean
    public RestHighLevelClient RestHighLevelClient() {
        HttpHost[] httpHosts = getHttpHosts();
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //账号密码
        credentialsProvider.setCredentials(
                      AuthScope.ANY, new UsernamePasswordCredentials("name", "password"));

        return new RestHighLevelClient(
                RestClient.builder(httpHosts)
                        .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
        );
    }

    private HttpHost[] getHttpHosts() {
        return Arrays.stream(httpPort.split(",")).map(x -> {
            String[] hostInfo = x.split(":");
            return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
        }).toArray(HttpHost[]::new);
    }

ES
创建索引以及映射相关(首先映射分词要保持环境中Es下的分词器安装正确)
//创建索引

public Boolean createEsIndex(String indexName) {
    try {
        // 创建索引
        ElasticsearchClient client = esClientConfig.elasticsearchClient();
        CreateIndexResponse createIndexResponse = client.indices().create(c -> c.index(indexName));
        // 响应状态
        log.debug("增加索引操作 ===={} " + createIndexResponse.acknowledged());
    } catch (IOException e) {
        log.error("es InsertError----{}", e);
    }
    return true;
}
//删除索引
 @Override
public Boolean delIndex(String indexName) {
    try {
        ElasticsearchClient client = esClientConfig.elasticsearchClient();
        // 删除索引
        DeleteIndexResponse deleteIndexResponse = client.indices().delete(e -> e.index(indexName));
        log.debug("删除操作 ===={} " + deleteIndexResponse.toString());
    } catch (IOException e) {
        log.error("es delError----{}", e);
    }
    return true;
}

对应的增删改查
//增加 文档

 @Override
    public Boolean createDocument() {
        String indexName = "test";
        try {
            RestHighLevelClient restHighLevelClient = esClientConfig.RestHighLevelClient();
            CreateIndexRequest request = new CreateIndexRequest(indexName);
            XContentBuilder builder = XContentFactory.jsonBuilder();
            builder.startObject();
            {
                builder.startObject("properties");
                {
                    builder.startObject("id");
                    {
                        builder.field("type", "long");
                    }
                    builder.endObject();
                    builder.startObject("title");
                    {
                        builder.field("type", "text")
                                //插入时分词
                                .field("analyzer", "ik_smart")
                                //搜索时分词
                                .field("search_analyzer", "ik_max_word");
                    }
                    builder.endObject();
                }
                builder.endObject();
            }
            builder.endObject();
            request.mapping(builder);
            org.elasticsearch.client.indices.CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
            log.debug("insertArticleIndex{}", createIndexResponse.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

//删除文档

 @Override
    public Boolean delDocument(String id,String index) {
        //两种方式都可以
        try {
            ElasticsearchClient client = esClientConfig.elasticsearchClient();
            // 构建请求
            DeleteResponse delete = client.delete(e -> e.index(index).id(id));
            log.debug("deleteResponse.result() = " + delete.toString());
           /* RestHighLevelClient restHighLevelClient = esClientConfig.RestHighLevelClient();
            DeleteRequest deleteRequest=new DeleteRequest(index);
            deleteRequest.id(id);
            DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
            log.debug("deleteResponse.result() = " + delete.getResult());*/
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

//模糊查询 增加高亮可以自行按照条件拼接文章来源地址https://www.toymoban.com/news/detail-514845.html

  @Override
    public List<Long> testQuery(String str, int page, int size) {
        try {
            if (page < 1) {
                page = 1;
            }
            if (size < 0) {
                size = 5;
            }
            int start = (page - 1) * size;
            int end = page * size - 1;
            String index = "test";
            ElasticsearchClient client = esClientConfig.elasticsearchClient();
            // 模糊查询,fuzziness表示差几个可以查询出来
            SearchResponse<ArticleEsDO> searchResponse =
                    client.search(s -> s.index(index).query(q -> q.wildcard(f -> f.field("title").value("*" + str + "*"))).from(start).size(end)
                            , Test.class);
            List<Test> collect = searchResponse.hits().hits().stream().map(Hit::source).collect(Collectors.toList());
            return collect.stream().map(ArticleEsDO::getId).collect(Collectors.toList());

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

到了这里,关于Java SpringBoot整合elasticsearch 7.17相关问题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot整合ElasticSearch版本问题

    最近在整个这两个框架,发现老是版本对不上,不是缺少类,就是启动不了,美好的一下午就这样浪费了,多说一句废话,es的版本更新速度也太快了,如果spring boot已经固定的,注意一下es的版本。 下面的这个链接是spring官方提供的兼容版本 springboot与elasticsearch兼容版本对应

    2024年02月15日
    浏览(33)
  • 关于springboot整合elasticsearch8.4.3的找不到相关类JsonProvider、JsonProvider的解决方案

    环境是springboot是2.3.7,elasticsearch是8.4.3 关于8.4.3的官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.4/installation.html 创建ElasticsearchClient 对象: 一开始报错ClassNotFoundException: jakarta.json.spi.JsonProvider,然后看了下官方文档修改了下jakarta.json-api的版本.解决完成之后

    2024年02月02日
    浏览(48)
  • Java17与相关框架支持版本SpringBoot、IDEA、Tomcat等

    相关框架需要的最低版本 Name Version Java 17+ Spring Framework 6.0 Spring Boot 3.0 Tomcat 10.1 Maven 3.6.3+ Gradle 7.x (7.5 or later) and 8.x Undertow 2.3 IntelliJ IDEA 2021.2+ Spring Framework Overview :: Spring Framework Spring 使创建 Java 企业应用程序变得容易。 它提供了在企业环境中使用 Java 语言所需的一切,支持

    2024年01月18日
    浏览(33)
  • java-springboot整合ElasticSearch8.2复杂查询

    近期有大数据项目需要用到es,而又是比较新的es版本,网上也很少有8.x的java整合教程,所有写下来供各位参考。 首先 1.导包: 2.客户端连接代码EsUtilConfigClint: 一开始按照其他博主的方法,长时间连接不操作查询再次调用查询时会报错timeout,所以要设置RequestConfigCallback 3

    2024年02月11日
    浏览(43)
  • CentOS yum 安装 EFK 7.17

    软件 说明 elasticsearch 分布式、高扩展、高实时的搜索与数据分析引擎 kibana 一个基于浏览器的Elasticsearch分析和搜索仪表板 filebeat 收集文件数据 文档 文档链接 elasticsearch 7.17 yum 文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/rpm.html kibana 7.17 yum 文档 https://www.elastic.co/guide

    2024年02月02日
    浏览(27)
  • SpringBoot整合ElasticSearch之Java High Level REST Client

    1 搭建SpringBoot工程 2 引入ElasticSearch相关坐标。 3 编写核心配置类 编写核心配置文件: 这里可以不写在配置,可以直接写在代码中,只是一般都是写在配置文件中 编写核心配置类 4 测试客户端对象 记得把maven的单元测试关了 注意:使用@Autowired注入RestHighLevelClient 如果报红线

    2024年02月05日
    浏览(44)
  • SpringBoot整合最新Elasticsearch Java API Client 7.16教程

        最新在学习SpringBoot整合es的一些知识,浏览了网上的一些资料,发现全都是es很久之前的版本了,其中比较流行的是Java REST Client的High Level Rest Client版本,但是官方文档的说明中,已经申明该版本即将废弃,不再进行维护了。可见:官方文档     目前官方推荐的版本是

    2023年04月24日
    浏览(29)
  • java SpringBoot2.7整合Elasticsearch(ES)7 进行文档增删查改

    首先 我们在 ES中加一个 books 索引 且带有IK分词器的索引 首先 pom.xml导入依赖 application配置文件中编写如下配置 spring.elasticsearch.hosts: 172.16.5.10:9200 我这里是用的yml格式的 告诉它指向 我们本地的 9200服务 然后 我们在启动类同目录下 创建一个叫 domain的包 放属性类 然后在这个包

    2024年02月19日
    浏览(37)
  • 【工作记录】springboot集成spring-data-elasticsearch访问es及问题解决

    ​ 前文我们介绍了通过可视化爬虫爬取新闻到Mysql库、基于docker-compose的elk集群部署及抽取mysql数据到es的过程,本文我们介绍通过集成springboot和spring-data-elasticsearch客户端完成连接es并查询数据的开发过程以及遇到的问题和解决方案,希望对大家能有所帮助,对文中内容有任何

    2023年04月10日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包