springboot2.X集成spring data elasticsearch

 1.准备工作

在集成es之前,我们需要选择springboot对应的es版本,版本一定要选择正确,否则后面可能会出现各种各样的问题。

下图是springboot与es客户端版本对应关系:

我的springboot版本是2.4.10,所以这里我选择es客户端7.9.3的版本

es下载链接:Download Elasticsearch | Elastic

ik分词器下载链接:

https://github.com/medcl/elasticsearch-analysis-ik/releases

注:ik分词器版本需要与es客户端版本对应,这里同样选择7.9.3版本。

下载完成后,将下载的ik分词器文件放在es的plugins文件夹下并解压

随后在es的bin目录下双击elasticsearch.bat即可运行,可以看到分词器加载成功,es启动成功 

2.导入maven依赖
<!-- elasticsearch-server -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3.配置ES
spring:
    elasticsearch:
        rest:
          host: localhost
          port: 9200
          connection-timeout: 5000
          read-timeout: 60000

 设置一下es的ip、端口以及超时时间,因为我没有给elasticsearch设置用户名和密码,如果设置了还需要加上username和password。

@Configuration
public class ElasticSearchClientConfig {

    @Value("${spring.elasticsearch.rest.host}")
    private String host;

    @Value("${spring.elasticsearch.rest.port}")
    private int port;

    @Value("${spring.elasticsearch.rest.connection-timeout}")
    private int connTimeout;

    @Value("${spring.elasticsearch.rest.read-timeout}")
    private int socketTimeout;


    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost(host,port, "http")
                ).setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
                        .setConnectTimeout(connTimeout)
                        .setSocketTimeout(socketTimeout))
        );
        return restHighLevelClient;
    }
}

注入一下es的bean,如果需要高级客户端的操作需要其他的配置。

4.创建ES实体
@Data
@ToString(callSuper = true)
@Document(indexName = EsConstant.GOODS_INDEX_NAME)
@ApiModel(value = "商品索引信息实体")
public class EsGoods {

    private static final long serialVersionUID = -2124485309475024490L;

    @Id
    @ApiModelProperty(value = "商品ID")
    private String id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    @ApiModelProperty(value = "商品名称")
    private String goodsName;

    @Field(type = FieldType.Text, analyzer = "ik_smart", searchAnalyzer = "ik_smart")
    @ApiModelProperty(value = "商品简介")
    private String goodsDesc;

    @Field(type = FieldType.Text, analyzer = "ik_smart", searchAnalyzer = "ik_smart")
    @ApiModelProperty(value = "详情")
    private String intro;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    @ApiModelProperty(value = "商品关键字")
    private String keyWords;
}

以上有几个需要注意的地方:

        1.indexName(索引名称)必须为小写

        2.es客户端7.x以后不在@Document中用type的方式来指定类型了

        3.@Document注解有一个属性createIndex,可选值true or false;代表是否在项目启动时创建索引。

        4.@Field注解:type属性为指定索引字段的类型,具体可以自行去了解一下。

        5.@Field注解:analyzer属性为指定创建索引时使用的分词器

        6.@Field注解:searchAnalyzer属性为指定查找索引时使用的分词器

        7.分词器我使用的是ik分词器,ik_smart代表粗粒度分词,ik_max_word代表细粒度分词,这里根据自己的业务去灵活使用。

5.创建repository类
public interface EsGoodsRepository extends ElasticsearchRepository<EsGoods, String> {

    /**
     * 检索商品
     *
     * @param goodsName 商品名称
     * @param goodsDesc 商品简介
     * @param intro     商品详情
     * @param keywords  商品关键字
     * @return 检索商品结果
     */
    List<EsGoods> findAllByGoodsNameOrGoodsDescOrIntroOrKeyWords(String goodsName, String goodsDesc, String intro, String keywords);
}

到这一步就完成了,对索引的基本操作都可以通过jpa自带的方法去实现。

6.启动项目遇到的问题

        1.如果启动不成功,查看是否是es客户端未启动。

        2.如果启动抛出Caused by: java.lang.NoSuchFieldError: LUCENE_*_*_*异常,这个是由于依赖冲突引起的,看看自己的项目中是否有Lucene依赖,自己进行取舍。

Spring Boot 1.x集成Elasticsearch(ES)可以通过使用Spring Data Elasticsearch来实现。Spring Data ElasticsearchSpring Data项目的一部分,它提供了与Elasticsearch集成,简化了与ES的交互。 以下是Spring Boot 1.x集成ES的步骤: 1. 添加依赖:在`pom.xml`文件中添加Spring Data Elasticsearch的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置连接信息:在`application.properties`或`application.yml`文件中配置ES的连接信息,包括主机、端口等: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9200 ``` 3. 创建实体类:创建与ES索引对应的实体类,并使用注解标记字段与索引的映射关系。例如: ```java @Document(indexName = "my_index", type = "my_type") public class MyEntity { @Id private String id; @Field(type = FieldType.Text) private String name; // 其他字段... // getter和setter方法... } ``` 4. 创建Repository接口:创建继承自`ElasticsearchRepository`的接口,用于对ES进行CRUD操作。例如: ```java public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> { // 自定义查询方法... } ``` 5. 使用Repository进行操作:在需要使用ES的地方注入`MyEntityRepository`,即可使用其提供的方法进行数据操作。例如: ```java @Autowired private MyEntityRepository myEntityRepository; public void saveEntity(MyEntity entity) { myEntityRepository.save(entity); } public MyEntity findById(String id) { return myEntityRepository.findById(id).orElse(null); } // 其他操作方法... ``` 以上是Spring Boot 1.x集成ES的基本步骤,你可以根据实际需求进行进一步的操作和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向阳不像羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值