日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringBoot整合ElasticSearch詳解及相關(guān)使用方法

SpringBoot整合ElasticSearch詳解及相關(guān)使用方法

作者:Springboot實(shí)戰(zhàn)案例錦集 2023-11-10 08:17:01

云計算

分布式 Elasticsearch是一個分布式搜索引擎,它由多個節(jié)點(diǎn)組成,每個節(jié)點(diǎn)都可以獨(dú)立地存儲和處理數(shù)據(jù)。這種分布式架構(gòu)使得Elasticsearch可以輕松地擴(kuò)展到數(shù)百臺甚至數(shù)千臺服務(wù)器,處理大量數(shù)據(jù)。

在咸陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),咸陽網(wǎng)站建設(shè)費(fèi)用合理。

環(huán)境:springboot2.4.12 + ElasticSearch7.8.0

簡介

Elasticsearch是一個分布式搜索引擎,底層基于Lucene實(shí)現(xiàn)。它屏蔽了Lucene的底層細(xì)節(jié),提供了分布式特性,同時對外提供了Restful API。Elasticsearch以其易用性迅速贏得了許多用戶,被用在網(wǎng)站搜索、日志分析等諸多方面。由于ES強(qiáng)大的橫向擴(kuò)展能力,甚至很多人也會直接把ES當(dāng)做NoSQL來用。

為什么要使用ES?

  1. 分布式特性:Elasticsearch具有分布式本質(zhì)特征,可以擴(kuò)展至數(shù)百臺甚至數(shù)千臺服務(wù)器,并處理PB量級的數(shù)據(jù)。
  2. 全文搜索能力:Elasticsearch在Lucene基礎(chǔ)上構(gòu)建,因此在全文本搜索方面表現(xiàn)十分出色。
  3. 近實(shí)時搜索:Elasticsearch是一個近實(shí)時的搜索平臺,從文檔索引操作到文檔變?yōu)榭伤阉鳡顟B(tài)之間的延時很短,一般只有一秒。因此,它非常適用于對時間有嚴(yán)苛要求的用例,例如安全分析和基礎(chǔ)設(shè)施監(jiān)測。
  4. 豐富的功能:Elasticsearch除了速度、可擴(kuò)展性和彈性等優(yōu)勢以外,還有大量強(qiáng)大的內(nèi)置功能,例如數(shù)據(jù)匯總和索引生命周期管理,可以方便用戶更加高效地存儲和搜索數(shù)據(jù)。
  5. 簡化數(shù)據(jù)處理過程:通過與Beats和Logstash進(jìn)行集成,用戶能夠在向Elasticsearch中索引數(shù)據(jù)之前輕松地處理數(shù)據(jù)。同時,Kibana不僅可針對Elasticsearch數(shù)據(jù)提供實(shí)時可視化,同時還提供UI以便用戶快速訪問應(yīng)用程序性能監(jiān)測(APM)、日志和基礎(chǔ)設(shè)施指標(biāo)等數(shù)據(jù)。

ES為什么那么快?

Elasticsearch之所以快,主要是因?yàn)樗捎昧朔植际郊軜?gòu)和近實(shí)時搜索技術(shù)。

首先,Elasticsearch是一個分布式搜索引擎,它由多個節(jié)點(diǎn)組成,每個節(jié)點(diǎn)都可以獨(dú)立地存儲和處理數(shù)據(jù)。這種分布式架構(gòu)使得Elasticsearch可以輕松地擴(kuò)展到數(shù)百臺甚至數(shù)千臺服務(wù)器,處理大量數(shù)據(jù)。

其次,Elasticsearch采用了近實(shí)時搜索技術(shù)。當(dāng)文檔被索引時,它可以在幾秒鐘內(nèi)變?yōu)榭伤阉鳡顟B(tài)。這種近實(shí)時搜索技術(shù)使得Elasticsearch可以快速響應(yīng)用戶的搜索請求,提高搜索性能和效率。

此外,Elasticsearch還采用了倒排索引技術(shù),將文檔中的每個單詞都作為索引項,存儲在倒排索引中。這種倒排索引技術(shù)使得Elasticsearch可以快速地定位包含特定單詞的文檔,進(jìn)一步提高了搜索性能。

最后,Elasticsearch還提供了豐富的查詢功能和優(yōu)化算法,可以根據(jù)用戶的查詢需求和數(shù)據(jù)特點(diǎn)進(jìn)行智能優(yōu)化,提高搜索準(zhǔn)確率和響應(yīng)速度。

綜上所述,Elasticsearch之所以快,是因?yàn)樗捎昧朔植际郊軜?gòu)、近實(shí)時搜索技術(shù)、倒排索引技術(shù)和優(yōu)化算法等多種技術(shù)手段,使得它可以高效地處理大量數(shù)據(jù),快速響應(yīng)用戶的搜索請求,并提高搜索準(zhǔn)確率和響應(yīng)速度。

接下來介紹如何在SpringBoot中整合ElasticSearch

相關(guān)依賴及應(yīng)用配置


  org.springframework.boot
  spring-boot-starter-data-elasticsearch


  org.springframework.boot
  spring-boot-starter-web


  org.springframework.boot
  spring-boot-starter-test
  test

配置文件

spring:
  elasticsearch:
    rest:
      uris:
      - http://localhost:9201
---
logging:
  level:
    com.pack: debug
    org.springframework.data.elasticsearch.core: debug

數(shù)據(jù)模型建立

@Document(createIndex = true, indexName = "products", shards = 3, replicas = 1)
public class Product {


  @Id
  private Long id ;
  @Field(analyzer = "ik_max_word", type = FieldType.Text)
  private String title ;
  @Field(type= FieldType.Keyword)
  private String category ;
  @Field(type = FieldType.Double)
  private Double price ;
  @Field(type = FieldType.Keyword, index = false)
  private String images ;
  @Override
  public String toString() {
    return "Product [id=" + id + ", title=" + title + ", category=" + category + ", price=" + price + ", images="
      + images + "]";
  }


}

ProductRepository

這里我們只需要繼承ElasticsearchRepository即可,是不是和data-jpa一樣一樣的的。

public interface ProductRepository extends ElasticsearchRepository {
}

繼承ElasticsearchRepository后 我們也可以像data-jpa一樣使用findBy*等語法來寫相關(guān)查詢方法。

  • 方法名中支持的關(guān)鍵字

圖片

方法返回值類型

  1. List
  2. Stream
  3. SearchHits
  4. List>
  5. Stream>
  6. SearchPage

Repository中也支持@Query注解的方式自定義查詢字符串。

public interface ProductRepository extends ElasticsearchRepository {


  List findByTitle(String title) ;


  @Query("{\"fuzzy\": {\"title\": \"?0\"}}")
  Page findByTitle(String sex,Pageable pageable);
  // 自定義查詢
  @Query("{\"match\": {\"category\": \"?0\"}}")
  Page findByCategory(String category,Pageable pageable);


  // 高亮設(shè)置
  @Highlight(fields = {@HighlightField(name = "title"), @HighlightField(name = "category")})
  List> findByTitleOrCategory(String title, String category,Pageable pageable) ;
}

除了使用Repository方式,我們還可以使用ElasticsearchRestTemplate的方式請求服務(wù)。如下測試

測試

@Resource
private ProductRepository productRepository ;
@Resource
private ElasticsearchRestTemplate elasticTemplate ;


@Test
public void testCreate() {
  Product product = new Product() ;
  product.setId(3L) ;
  product.setCategory("配件") ;
  product.setPrice(299.5d) ;
  product.setImages("http://www.pack.com/memory.jpg") ;
  product.setTitle("很牛逼的內(nèi)存條") ;
  productRepository.save(product) ;
}


@Test
public void testQuery() {
  Product product = productRepository.findById(1L).orElse(null) ;
  System.out.println(product) ;
}


@Test
public void testFindAll() {
  Pageable pageable = PageRequest.of(1, 2) ;
  Page page = productRepository.findAll(pageable) ;
  System.out.println(page.getTotalPages() + "\n" + page.getContent()) ;
}


@Test
public void testTermSearch() {
  for (Product p : productRepository.findByTitle("Java從入門到精通")) {
    System.out.println(p) ;
  }
}


@Test
public void testFindByTitle() {
  Pageable pageable = PageRequest.of(0, 2) ;
  Page page = productRepository.findByTitle("Java", pageable) ;
  System.out.println(page.getTotalPages() + "\n" + page.getContent()) ;
}


@Test
public void testFindByCategory() {
  Pageable pageable = PageRequest.of(0, 2) ;
  Page page = productRepository.findByCategory("書籍", pageable) ;
  System.out.println(page.getTotalPages() + "\n" + page.getContent()) ;
}


@Test
public void testCriteriaQuery() {
  Criteria criteria = new Criteria("price").greaterThan(50).lessThan(80);
  Query query = new CriteriaQuery(criteria);
  SearchHits hits = elasticTemplate.search(query, Product.class, IndexCoordinates.of("products")) ;
  for (SearchHit hit : hits) {
    System.out.println(hit) ;
  }
}


@Test
public void testStringQuery() {
  Query query = new StringQuery("{ \"match\": { \"category\": { \"query\": \"配件\" } } } ");
  SearchHits hits = elasticTemplate.search(query, Product.class);
  for (SearchHit hit : hits) {
    System.out.println(hit) ;
  }
}


@Test
public void testStringQueryFuzzy() {
  Query query = new StringQuery("{ \"fuzzy\":{\"title\":{\"value\":\"Java\"}} }");
  HighlightQuery highlightQuery = null ;
  HighlightBuilder highBuilder = new HighlightBuilder().preTags("").postTags("").field("title") ;
  highlightQuery = new HighlightQuery(highBuilder) ;
  query.setHighlightQuery(highlightQuery) ;
  SearchHits hits = elasticTemplate.search(query, Product.class);
  for (SearchHit hit : hits) {
    System.out.println(hit + "\n" + hit.getHighlightField("title")) ;
  }
}

在啟動服務(wù)時會自動地為我們創(chuàng)建索引。

我們可以安裝Chrome插件 ElasticSearch Head非常方便地查看es的狀態(tài)及索引信息。

圖片

ES集群狀態(tài)情況

圖片

完畢!?。?/p>
當(dāng)前名稱:SpringBoot整合ElasticSearch詳解及相關(guān)使用方法
文章分享:http://m.5511xx.com/article/cdgisso.html