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

话不多说直接上代码,首先关注点Springboot相关ES相关的版本对应
在这里插入图片描述
找到对应的版本号,我这里对应7.17.1 对应的springboot版本 2.3.* 即可
在这里插入图片描述

在sSPR里插入图片描述
上图为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不支持

在这里插入图片描述

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

//模糊查询 增加高亮可以自行按照条件拼接

  @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;
    }
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]和\[2\]提供了关于在Spring Boot整合Elasticsearch的一些代码示例。根据这些示例,可以看出在Spring Boot整合Elasticsearch的主要步骤包括创建索引和映射、增加、删除和查询文档。 首先,创建索引和映射可以使用`CreateIndexRequest`和`XContentBuilder`来实现。在创建索引时,可以设置字段的类型和分词器等属性。 接下来,可以使用`RestHighLevelClient`来增加、删除和查询文档。在增加文档时,可以使用`IndexRequest`来指定索引名称和文档内容。在删除文档时,可以使用`DeleteRequest`指定要删除的文档的索引名称和ID。在查询文档时,可以使用`SearchRequest`指定索引名称和查询条件。 引用\[3\]提供了一个模糊查询的示例。在该示例中,使用`wildcard`查询来进行模糊匹配,可以通过设置`fuzziness`参数来指定容忍的差异程度。可以使用`SearchResponse`来获取查询结果,并通过`hits()`方法获取命中的文档列表。 综上所述,整合Elasticsearch的关键步骤包括创建索引和映射、增加、删除和查询文档。可以根据具体需求和示例代码进行相应的实现。 #### 引用[.reference_title] - *1* *2* *3* [Java SpringBoot整合elasticsearch 7.17相关问题记录](https://blog.csdn.net/XCaiNiAOxXXX/article/details/125422935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值