SpringDataElasticsearch在SpringBoot项目中的简单使用

Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。

Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通过对原生API的封装,使得程序员可以简单的对ElasticSearch进行各种操作。

1.引入Maven

在 Maven 中添加 Spring Data Elasticsearch 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.配置Elasticsearch连接

配置 Elasticsearch 服务器地址和端口

spring:
    elasticsearch:
      uris: http://xx.xx.xx.xx:9200

3.创建JavaBean

创建一个代表 Elasticsearch 文档的 Java 类,并使用 Spring Data Elasticsearch 注解进行标注。

@Data
@Document(indexName = "blog")
public class Blog{
    @Id
    private Long blogId;

    @Field(type = FieldType.Text)
    private String title;

    @Field(type = FieldType.Text)
    private String content;

    @Field(type = FieldType.Text)
    private String author;

    //博客所属分类。
    @Field(type = FieldType.Keyword)
    private String category;

    //0: 未发布(草稿) 1:已发布 2:已删除
    @Field(type = FieldType.Integer)
    private int status;

    //序列号,用于给外部展示的id
    @Field(type = FieldType.Keyword)
    private String serialNum;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @Field(type= FieldType.Date, format= DateFormat.date_hour_minute_second_fraction, pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Date createTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @Field(type=FieldType.Date, format=DateFormat.date_hour_minute_second_fraction, pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Date updateTime;
}

4.创建 Repository 接口

创建一个继承自 ElasticsearchRepository 的接口,用于执行 CRUD 操作。例如,创建 BlogRepository:

public interface BlogRepository extends ElasticsearchRepository<Blog,String> {
    List<Blog> findByTitleIn(List<String> title);
    Page<Blog> findByTitleContaining(String title, Pageable pageable);
}

5. 使用 Repository 进行操作

在 Service 或 Controller 中注入 BlogRepository 并使用它执行查询、保存、删除等操作:

@Service
public class EsServiceImpl implements EsService {

    @Autowired
    private BlogRepository blogRepository;

    @Override
    public void getDetails(String title) throws Exception {
        List<String> list = new ArrayList<>();
        list.add(title);
        List<Blog> blog = blogRepository.findByTitleIn(list);
    }
}

6. 自定义查询方法

如果需要执行更复杂的查询,可以使用 @Query 注解在 Repository 方法上定义原生 Elasticsearch 查询 DSL:

@Repository
public interface BlogRepository extends ElasticsearchRepository<Blog,String> {

    List<Blog> findByTitleIn(List<String> title);

    @Query("{\"bool\":{\"must\":[{\"match\":{\"title\":\"?0\"}}]}}")
    List<Blog> findByTitle(String title);
}
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot项目使用Elasticsearch,需要在pom.xml文件添加相关依赖。以下是一个使用Spring BootElasticsearch简单示例: 1.添加依赖 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2.配置Elasticsearch属性 在application.properties文件添加Elasticsearch的配置属性,例如: ```properties spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=localhost:9300 ``` 3.定义实体类 在Spring Boot应用程序,可以使用Spring Data Elasticsearch来定义Elasticsearch实体类。例如: ```java @Document(indexName="blog",type="article") public class Article { @Id private String id; private String title; private String content; // getters and setters } ``` 4.定义Elasticsearch存储库 定义一个Elasticsearch存储库接口,例如: ```java public interface ArticleRepository extends ElasticsearchRepository<Article, String> { List<Article> findByTitle(String title); } ``` 5.在服务使用Elasticsearch存储库 在服务注入Elasticsearch存储库,并使用它执行Elasticsearch操作,例如: ```java @Service public class ArticleService { @Autowired private ArticleRepository articleRepository; public List<Article> search(String title) { return articleRepository.findByTitle(title); } public void save(Article article) { articleRepository.save(article); } } ``` 这是一个简单的示例,演示了如何在Spring Boot应用程序使用Elasticsearch。你可以使用这个示例作为起点,根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值