欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot結合ElasticSearch實現(xiàn)模糊查詢的項目實踐

 更新時間:2024年03月13日 11:23:18   作者:擁抱AI  
本文主要介紹了SpringBoot結合ElasticSearch實現(xiàn)模糊查詢的項目實踐,主要實現(xiàn)模糊查詢、批量CRUD、排序、分頁和高亮功能,具有一定的參考價值,感興趣的可以了解一下

本文將詳細介紹如何使用SpringBoot整合ElasticSearch,實現(xiàn)模糊查詢、批量CRUD、排序、分頁和高亮功能。我們將深入探討ElasticSearch的相關概念和技術細節(jié),以及如何使用SpringData Elasticsearch庫簡化開發(fā)過程。

1. 引言

ElasticSearch是一個基于Lucene構建的開源搜索引擎,它提供了一個分布式、多租戶的全文搜索引擎,具有高可靠性、可擴展性和易用性。SpringBoot是Spring框架的一個模塊,它簡化了基于Spring的應用程序的開發(fā)和部署。將SpringBoot與ElasticSearch整合,可以實現(xiàn)強大的搜索功能,如模糊查詢、批量CRUD、排序、分頁和高亮等。

2. 環(huán)境準備

在開始之前,請確保已安裝Java和Maven,并配置好相應的環(huán)境變量。接下來,我們將創(chuàng)建一個SpringBoot項目,并添加ElasticSearch依賴。

2.1 創(chuàng)建SpringBoot項目

使用Spring Initializr(https://start.spring.io/)創(chuàng)建一個SpringBoot項目,選擇相應的依賴,如Spring Web、Spring Data Elasticsearch等。

2.2 添加ElasticSearch依賴

在項目的pom.xml文件中添加ElasticSearch依賴:

<dependencies>
    <!-- SpringBoot Elasticsearch 依賴 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <!-- 其他依賴 -->
</dependencies>

3. 配置ElasticSearch

在application.properties或application.yml文件中配置ElasticSearch相關屬性:

# application.properties
spring.data.elasticsearch.cluster-name=my-cluster-name
spring.data.elasticsearch.cluster-nodes=localhost:9300

4. 創(chuàng)建ElasticSearch實體類

創(chuàng)建一個ElasticSearch實體類,用于映射ElasticSearch索引中的文檔:

@Document(indexName = "blog", type = "article")
public class Article {
    @Id
    private String id;
    private String title;
    private String content;
    // getter and setter
}

5. 創(chuàng)建ElasticSearch repository接口

創(chuàng)建一個繼承ElasticsearchRepository接口的repository接口,用于操作ElasticSearch索引:

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
}

6. 實現(xiàn)模糊查詢、批量CRUD、排序、分頁、高亮

6.1 模糊查詢

在ArticleRepository接口中添加一個自定義方法,用于實現(xiàn)模糊查詢:

List<Article> findByTitleContaining(String title);

在Controller中添加一個接口,用于接收前端查詢參數(shù)并調用repository方法:

@RestController
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;
    @GetMapping("/search")
    public List<Article> search(@RequestParam("title") String title) {
        return articleRepository.findByTitleContaining(title);
    }
}

6.2 批量CRUD

在Controller中添加一個接口,用于接收前端提交的批量操作請求:

@PostMapping("/batch")
public ResponseEntity<String> batch(@RequestBody List<Article> articles) {
    for (Article article : articles) {
        articleRepository.save(article);
    }
    return ResponseEntity.ok("批量操作成功!");
}

6.3 排序

在ElasticsearchRepository接口中,預定義了許多排序的方法,如findByTitleOrderByCreateTimeDesc。如果這些方法無法滿足需求,可以使用@Query注解自定義查詢,并指定排序規(guī)則:

@Query("{\"bool\": {\"must\": {\"match\": {\"title\": \"?0\"}}}}")
List<Article> findByTitle(String title, Sort sort);

6.4 分頁

在ElasticsearchRepository接口中,預定義了許多分頁的方法,如findByTitle(String title, Pageable pageable)。在Controller中,可以使用Pageable對象接收分頁參數(shù):

@GetMapping("/search")
public Page<Article> search(@RequestParam("title") String title, Pageable pageable) {
    return articleRepository.findByTitle(title, pageable);
}

6.5 高亮

在ElasticsearchRepository接口中,預定義了許多高亮的方法,如findByTitle(String title, Pageable pageable)。在Controller中,可以使用Pageable對象接收分頁參數(shù),并返回一個帶有高亮信息的Page對象:

@GetMapping("/search")
public Page<Article> search(@RequestParam("title") String title, Pageable pageable) {
    NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
    queryBuilder.withQuery(matchQuery("title", title));
    queryBuilder.withHighlightFields(new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"));
    queryBuilder.withPageable(pageable);
    NativeSearchQuery searchQuery = queryBuilder.build();
    Page<Article> articles = articleRepository.search(searchQuery);
    return articles;
}

7. 完整代碼示例

將上述所有代碼片段組合在一起,我們得到了一個完整的SpringBoot+ElasticSearch實現(xiàn)模糊查詢、批量CRUD、排序、分頁和高亮的示例。下面是完整的代碼示例:

// Article.java
@Document(indexName = "blog", type = "article")
public class Article {
    @Id
    private String id;
    private String title;
    private String content;
    // getter and setter
}
// ArticleRepository.java
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
    List<Article> findByTitleContaining(String title);
    Page<Article> findByTitle(String title, Pageable pageable);
}
// ArticleController.java
@RestController
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;
    @GetMapping("/search")
    public Page<Article> search(@RequestParam("title") String title, Pageable pageable) {
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        queryBuilder.withQuery(matchQuery("title", title));
        queryBuilder.withHighlightFields(new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"));
        queryBuilder.withPageable(pageable);
        NativeSearchQuery searchQuery = queryBuilder.build();
        Page<Article> articles = articleRepository.search(searchQuery);
        return articles;
    }
    @PostMapping("/batch")
    public ResponseEntity<String> batch(@RequestBody List<Article> articles) {
        for (Article article : articles) {
            articleRepository.save(article);
        }
        return ResponseEntity.ok("批量操作成功!");
    }
}
// application.properties
spring.data.elasticsearch.cluster-name=my-cluster-name
spring.data.elasticsearch.cluster-nodes=localhost:9300

8. 總結

本文詳細介紹了如何使用SpringBoot整合ElasticSearch,實現(xiàn)模糊查詢、批量CRUD、排序、分頁和高亮功能。請注意,實際部署時,您可能需要根據(jù)實際情況調整ElasticSearch集群配置,以及索引的創(chuàng)建和映射策略。此外,對于生產(chǎn)環(huán)境,您可能還需要考慮更多的錯誤處理和資源管理策略,例如處理可能出現(xiàn)的異常情況,以及優(yōu)化查詢性能等。

到此這篇關于SpringBoot結合ElasticSearch實現(xiàn)模糊查詢的項目實踐的文章就介紹到這了,更多相關SpringBoot ElasticSearch模糊查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Java生成GUID的實現(xiàn)方法

    基于Java生成GUID的實現(xiàn)方法

    本篇文章是對Java生成GUID的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解spring cloud hystrix 請求合并collapsing

    詳解spring cloud hystrix 請求合并collapsing

    這篇文章主要介紹了詳解spring cloud hystrix 請求合并collapsing,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java后端合成圖片的實現(xiàn)示例

    java后端合成圖片的實現(xiàn)示例

    本文主要介紹了java后端合成圖片的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • SpringMvc入門指南(必看)

    SpringMvc入門指南(必看)

    下面小編就為大家?guī)硪黄猄pringMvc入門指南(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java利用AQS實現(xiàn)自定義鎖

    Java利用AQS實現(xiàn)自定義鎖

    本文主要介紹了Java利用AQS實現(xiàn)自定義鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • mybatis 返回Map類型key改為小寫的操作

    mybatis 返回Map類型key改為小寫的操作

    這篇文章主要介紹了mybatis 返回Map類型key改為小寫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 重學SpringBoot3之日志Logging使用方式

    重學SpringBoot3之日志Logging使用方式

    在日常開發(fā)中會遇到不同的異常,日志方便我們?nèi)ヅ挪樘幚?這篇文章主要給大家介紹了關于重學SpringBoot3之日志Logging使用方式的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • 詳解如何使用XML配置來定義和管理Spring Bean

    詳解如何使用XML配置來定義和管理Spring Bean

    XML 配置文件是 Spring 中傳統(tǒng)的 Bean 配置方式,通過定義 XML 元素來描述 Bean 及其依賴關系,在 Spring 框架中,Bean 是由 Spring IoC(控制反轉)容器管理的對象,本文將詳細介紹如何使用 XML 配置來定義和管理 Spring Bean,需要的朋友可以參考下
    2024-06-06
  • Servlet Filter過濾器執(zhí)行順序

    Servlet Filter過濾器執(zhí)行順序

    這篇文章主要介紹了Servlet Filter過濾器執(zhí)行順序的相關資料,幫助大家更好的理解為什么要用過濾器,感興趣的朋友可以了解下
    2020-12-12
  • java  LinkedList類詳解及實例代碼

    java LinkedList類詳解及實例代碼

    這篇文章主要介紹了java LinkedList類詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-01-01

最新評論