springboot整合spring data elasticsearch

jpa的特性

jpa可以自定义接口查询,也就意味着自己在mappe按照要求写一个方法,service只需要调用传值就可以了

一,创建maven项目导入依赖

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.3.6.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
</dependencies>

二,创建application.yml配置文件

spring:
  elasticsearch:
    rest:
      uris: http://localhost:9200

三,创建实体类


@Data
@Document(indexName = "goods")
public class Goods implements Serializable {

    @Field(type = FieldType.Keyword)
    private String id;
    @Field(type = FieldType.Text)
    private String goodsName;
    @Field(type = FieldType.Integer)
    private Integer store;
    @Field(type =FieldType.Double)
    private double price;
}

四,创建dao层



@Repository
public interface GoodsDao extends ElasticsearchRepository<Goods,String> {
}

五,创建主启动类


@SpringBootApplication
public class ElasticsearchApplication {
    public static void main(String[] args) {
        SpringApplication.run(ElasticsearchApplication.class, args);
    }
}

六,注入测试


@RunWith(SpringRunner.class)
@SpringBootTest(classes = ElasticsearchApplication.class)
public class ElastricsearchTest {

    //注入dao
    @Autowired
    private GoodsDao goodsDao;


    /**
    * @Description: 插入一个
    * @Author: Mr.Zhan
    * @Date: 2022/2/14
    */
       @Test
       public  void  testCreate(){
           Goods goods = new Goods("1","springoot整合",12,300.0);
           goodsDao.save(goods);

       }

       /**
       * @Description: 插入多个
       * @Author: Mr.Zhan
       * @Date: 2022/2/14
       */
          @Test
          public  void  testCerateMany(){
              ArrayList<Goods> list = new ArrayList<>();
              Goods goods = new Goods("2","springoot整合2",12,300.0);
              Goods goods1 = new Goods("3","springoot整合3",12,300.0);
              list.add(goods);
              list.add(goods1);
              goodsDao.saveAll(list);
          }
          /**
          * @Description: 根据id查询
          * @Author: Mr.Zhan
          * @Date: 2022/2/14
          */
             @Test
             public  void  testFindById(){
                 Optional<Goods> goods = goodsDao.findById("2");
                 System.out.println("goods.get() = " + goods.get());
             }

             /**
             * @Description: 根据所有查询
             * @Author: Mr.Zhan
             * @Date: 2022/2/14
             */
                @Test
                public  void  testFindAll(){
                    goodsDao.findAll().forEach((z)-> System.out.println("z = " + z));
                }


                /**
                * @Description: 修改
                * @Author: Mr.Zhan
                * @Date: 2022/2/14
                */
                   @Test
                   public  void  testUpdate(){
                       Goods goods = new Goods("3","springoot整合2",12,200.0);
                       goodsDao.save(goods);
                   }

                   /**
                   * @Description: 排序查询
                   * @Author: Mr.Zhan
                   * @Date: 2022/2/14
                   */
                      @Test
                      public  void  testSort(){
                          ArrayList<String>  list= new ArrayList<>();
                          list.add("price");
                          Sort orders = new Sort(Sort.Direction.ASC,list);
                          goodsDao.findAll(orders);
                      }

                      /**
                      * @Description: 分页查询
                      * @Author: Mr.Zhan
                      * @Date: 2022/2/14
                      */
                         @Test
                         public  void  testPageResult(){
                             Pageable pageable = Pageable.unpaged();
                             goodsDao.findAll(Pageable.unpaged()).get().forEach((s)-> System.out.println("s = " + s));
                         }
}

### 整合 ElasticsearchSpring Boot 项目 为了在 Spring Boot 项目中整合 Elasticsearch,需遵循特定的步骤来设置环境并调整配置文件。当使用 `spring-boot-starter-data-elasticsearch` 启动器时,可以通过定义相应的仓库接口轻松地执行 CRUD 操作。 #### 修改 Configuration 文件 对于配置文件而言,推荐采用 YAML 格式的 `application.yml` 来替代传统的 `.properties` 文件形式[^3]。以下是针对 Elasticsearch 的基本配置实例: ```yaml spring: elasticsearch: rest: uris: http://1xx.xxx.xxx.250:9200 ``` 此片段指定了连接到 Elasticsearch 实例所需的 URI 地址。确保替换示例 IP 和端口号为实际运行 ES 节点的位置信息。 #### 创建 Repository 接口 接着,在应用程序内创建一个继承自 `ElasticsearchRepository<T,ID>` 或者更通用版本 `ElasticsearchCrudRepository<T,ID>` 的接口用于操作指定类型的文档记录[^1][^2]。这里 T 表示映射至索引内的实体类;ID 是唯一标识符的数据类型(通常是字符串或整数)。例如: ```java package com.pro.tools.elasticsearch.dao; import com.pro.tools.elasticsearch.vo.Message; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface MessageRepository extends ElasticsearchRepository<Message, String> { } ``` 上述代码展示了如何声明一个名为 `MessageRepository` 的接口以处理消息类型的持久化逻辑。 #### 更新 data.elasticsearch 字段 如果要更改与 `data.elasticsearch` 相关的具体字段,则取决于具体的应用场景以及所使用的实体模型结构。通常情况下,这些属性会在对应的 Java 类里通过注解方式标注出来,比如利用 `@Document(indexName="messages")` 设置索引名称,或是借助 `@Field(type=FieldType.Text)` 定义字段特性等。因此,任何关于修改此类元数据的操作都应集中在实体 Bean 上完成而不是直接改动配置项本身。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值