SpringBoot集成Elasticseach

      網(wǎng)友投稿 663 2025-04-03

      目錄

      一、Elasticseach介紹

      1.簡單介紹

      2.對(duì)比關(guān)系:

      3.詳細(xì)說明:

      4.查出數(shù)據(jù)的解釋

      二、SpringBoot集成Elasticseach

      1.引入依賴

      2.添加配置

      3.創(chuàng)建pojo類與索引對(duì)應(yīng)

      4.SpringData封裝了基礎(chǔ)的增刪改查,自定義增刪改查

      5.測試方法--增刪改查

      如果本篇博客對(duì)您有一定的幫助,大家記得留言++哦。

      SpringBoot集成Elasticseach

      一、Elasticseach介紹

      1.簡單介紹

      官網(wǎng):開源搜索:Elasticsearch、ELK Stack 和 Kibana 的開發(fā)者

      ElasticSeach詳細(xì)安裝教程--圖文介紹超詳細(xì):ElasticSeach詳細(xì)安裝教程

      令人記憶深刻的口號(hào):能夠發(fā)現(xiàn)意料之中以及意料之外的情況

      Elasticsearch也是基于Lucene的全文檢索庫,本質(zhì)也是存儲(chǔ)數(shù)據(jù),很多概念與MySQL類似的。是一種全文檢索技術(shù)。

      Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和豐富您的數(shù)據(jù)并將其存儲(chǔ)在 Elasticsearch 中。Kibana 使您能夠以交互方式探索、可視化和分享對(duì)數(shù)據(jù)的見解,并管理和監(jiān)控堆棧。Elasticsearch 是索引、搜索和分析魔法發(fā)生的地方。

      Elasticsearch 是一個(gè)基于JSON的分布式搜索和分析引擎。

      Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級(jí)搜索引擎。Elasticsearch用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。

      2.對(duì)比關(guān)系:

      索引(indices)--------------------------------Databases 數(shù)據(jù)庫 類型(type)-----------------------------Table 數(shù)據(jù)表 文檔(Document)----------------Row 行 字段(Field)-------------------Columns 列

      3.詳細(xì)說明:

      概念

      說明

      索引庫(indices)

      indices是index的復(fù)數(shù),代表許多的索引,

      類型(type)

      類型是模擬mysql中的table概念,一個(gè)索引庫下可以有不同類型的索引,比如商品索引,訂單索引,其數(shù)據(jù)格式不同。不過這會(huì)導(dǎo)致索引庫混亂,因此未來版本中會(huì)移除這個(gè)概念

      文檔(document)

      存入索引庫原始的數(shù)據(jù)。比如每一條商品信息,就是一個(gè)文檔

      字段(field)

      文檔中的屬性

      映射配置(mappings)

      字段的數(shù)據(jù)類型、屬性、是否索引、是否存儲(chǔ)等特性

      4.查出數(shù)據(jù)的解釋

      took:查詢花費(fèi)時(shí)間,單位是毫秒

      time_out:是否超時(shí)

      _shards:分片信息

      hits:搜索結(jié)果總覽對(duì)象

      total:搜索到的總條數(shù)

      max_score:所有結(jié)果中文檔得分的最高分

      hits:搜索結(jié)果的文檔對(duì)象數(shù)組,每個(gè)元素是一條搜索到的文檔信息

      _index:索引庫

      _type:文檔類型

      _id:文檔id

      _score:文檔得分

      _source:文檔的源數(shù)據(jù)

      二、SpringBoot集成Elasticseach

      1.引入依賴

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

      2.添加配置

      spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 192.168.7.132:9300

      3.創(chuàng)建pojo類與索引對(duì)應(yīng)

      package com.leyou.elasticsearch.pojo; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; /** * 創(chuàng)建pojo類與索引對(duì)應(yīng) * * @author Promsing(張有博) * @version 1.0.0 * @since 2022/1/26 - 20:35 */ @Document(indexName = "item", type = "docs", shards = 1, replicas = 0) public class Item { @Id private Long id; /** * 標(biāo)題 */ @Field(type = FieldType.Text,analyzer = "ik_max_word") private String title; /** * 分類 */ @Field(type = FieldType.Keyword) private String category; /** * 品牌 */ @Field(type = FieldType.Keyword) private String brand; /** * 價(jià)格 */ @Field(type = FieldType.Double) private Double price; /** * 圖片地址 */ @Field(type = FieldType.Keyword) private String images; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public Item() { } public Item(Long id, String title, String category, String brand, Double price, String images) { this.id = id; this.title = title; this.category = category; this.brand = brand; this.price = price; this.images = images; } @Override public String toString() { return "Item{" + "id=" + id + ", title='" + title + '\'' + ", category='" + category + '\'' + ", brand='" + brand + '\'' + ", price=" + price + ", images='" + images + '\'' + '}'; } }

      4.SpringData封裝了基礎(chǔ)的增刪改查,自定義增刪改查

      這里需要繼承接口-ItemRepository

      /** * 自定義的增刪改查接口 * * @author Promsing(張有博) * @version 1.0.0 * @since 2022/1/27 - 15:10 */ public interface ItemRepository extends ElasticsearchRepository { List findByTitle(String title); List findByPriceBetween(Double d1,Double d2); }

      5.測試方法--增刪改查

      package com.leyou.elasticsearch; import com.leyou.elasticsearch.dao.ItemRepository; import com.leyou.elasticsearch.pojo.Item; import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * 測試ES的增刪改查 * * @author Promsing(張有博) * @version 1.0.0 * @since 2022/1/26 - 20:57 */ @SpringBootTest(classes = ElasticsearchApplication.class) @RunWith(SpringRunner.class) public class ElasticsearchTest { @Autowired private ElasticsearchTemplate elasticsearchTemplate;//ES的模板類 @Autowired private ItemRepository itemRepository;//Item的增刪改查 /** * 創(chuàng)建索引庫 */ @Test public void testIndex(){ this.elasticsearchTemplate.createIndex(Item.class); this.elasticsearchTemplate.putMapping(Item.class); //this.elasticsearchTemplate.deleteIndex(); } /** * 插入與更新 */ @Test public void testCreate(){ Item item = new Item(1L,"小米手機(jī)9","手機(jī)","小米",3999.00,"https:www.baidu.com"); Object save = this.itemRepository.save(item); List list = new ArrayList<>(); list.add(new Item(2L, "堅(jiān)果手機(jī)R1", " 手機(jī)", "錘子", 3699.00, "http://image.leyou.com/123.jpg")); list.add(new Item(3L, "華為META10", " 手機(jī)", "華為", 4499.00, "http://image.leyou.com/3.jpg")); // 接收對(duì)象集合,實(shí)現(xiàn)批量新增 Iterable items = itemRepository.saveAll(list); System.out.println(items); } /** * 刪除 */ @Test public void testDelete(){ Item item=new Item(1L,"小米手機(jī)9","手機(jī)","小米",3999.00,"https:www.baidu.com"); this.itemRepository.delete(item); } /** * 查詢 */ @Test public void testFind(){ System.out.println("-----主鍵查詢------"); Optional byId = this.itemRepository.findById(1L); System.out.println(byId.get()); System.out.println("-----查詢?nèi)?-----"); Iterable all = this.itemRepository.findAll(); all.forEach(i-> System.out.println(i)); System.out.println("-----排序查詢(升序降序)------"); Iterable price = this.itemRepository.findAll(Sort.by("price").descending()); price.forEach(System.out::println); } /** * 調(diào)用自定義方法 */ @Test public void testFindByU(){ List phone = this.itemRepository.findByTitle("手機(jī)"); // phone.forEach(i->{ // System.out.println(i); // }); List byPriceBetween = this.itemRepository.findByPriceBetween(4000.0, 5000.0); byPriceBetween.forEach(i-> System.out.println(i)); } /** * 批量插入 */ @Test public void indexList() { List list = new ArrayList<>(); list.add(new Item(1L, "小米手機(jī)7", "手機(jī)", "小米", 3299.00, "http://image.leyou.com/13123.jpg")); list.add(new Item(2L, "堅(jiān)果手機(jī)R1", "手機(jī)", "錘子", 3699.00, "http://image.leyou.com/13123.jpg")); list.add(new Item(3L, "華為META10", "手機(jī)", "華為", 4499.00, "http://image.leyou.com/13123.jpg")); list.add(new Item(4L, "小米Mix2S", "手機(jī)", "小米", 4299.00, "http://image.leyou.com/13123.jpg")); list.add(new Item(5L, "榮耀V10", "手機(jī)", "華為", 2799.00, "http://image.leyou.com/13123.jpg")); // 接收對(duì)象集合,實(shí)現(xiàn)批量新增 itemRepository.saveAll(list); } /** * 高級(jí)查詢 */ @Test public void testSearch(){ //通過查詢構(gòu)建器工具構(gòu)建--重點(diǎn):QueryBuilders:詞條、模糊、范圍 MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手機(jī)"); //獲取結(jié)果集 Iterable items = this.itemRepository.search(queryBuilder); items.forEach(System.out::println); } /** * 重點(diǎn)--自定義查詢 */ @Test public void testNative(){ // 構(gòu)建自定義查詢構(gòu)建器 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); // 添加基本查詢條件 queryBuilder.withQuery(QueryBuilders.matchQuery("title","手機(jī)")); // 查詢分頁結(jié)果集 Page itemPage = this.itemRepository.search(queryBuilder.build()); System.out.println(itemPage.getTotalPages()); System.out.println(itemPage.getTotalElements()); itemPage.forEach(i-> System.out.println(i)); } /** * 重點(diǎn)--分頁查詢 */ @Test public void testPage(){ // 構(gòu)建自定義查詢構(gòu)建器 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); // 添加基本查詢條件 queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機(jī)")); queryBuilder.withPageable(PageRequest.of(1,2)); // 查詢分頁結(jié)果集 Page itemPage = this.itemRepository.search(queryBuilder.build()); System.out.println(itemPage.getTotalPages()); System.out.println(itemPage.getTotalElements()); itemPage.forEach(i-> System.out.println(i)); } /** * 重點(diǎn)--排序 */ @Test public void testSort(){ // 構(gòu)建自定義查詢構(gòu)建器 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); // 添加基本查詢條件 queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機(jī)")); queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC)); // 查詢分頁結(jié)果集 Page itemPage = this.itemRepository.search(queryBuilder.build()); System.out.println(itemPage.getTotalPages()); System.out.println(itemPage.getTotalElements()); itemPage.forEach(i-> System.out.println(i)); } }

      如果本篇博客對(duì)您有一定的幫助,大家記得留言++哦。

      Elasticsearch 實(shí)時(shí)流計(jì)算服務(wù) CS

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:文檔屬性(文檔屬性的標(biāo)題怎么設(shè)置)
      下一篇:word中如何自動(dòng)換行(word 如何自動(dòng)換行)
      相關(guān)文章
      亚洲大尺度无码无码专区| 18gay台湾男同亚洲男同| 性色av极品无码专区亚洲| 亚洲精品少妇30p| 亚洲AV永久无码精品放毛片| 亚洲精品成人图区| 亚洲性天天干天天摸| 亚洲国产精品久久久天堂| 亚洲精品无码久久久影院相关影片| 国产亚洲视频在线播放| 亚洲日韩在线中文字幕第一页| 无码不卡亚洲成?人片| 国产午夜亚洲精品不卡| 亚洲精品国产福利一二区| 亚洲人成无码久久电影网站| 亚洲av手机在线观看| 一级毛片直播亚洲| 国产L精品国产亚洲区久久| 亚洲人午夜射精精品日韩| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲国产超清无码专区| 亚洲午夜电影一区二区三区| 亚洲理论片在线中文字幕| 亚洲成年人免费网站| 亚洲人成人网毛片在线播放| 亚洲中文字幕无码mv| 色噜噜噜噜亚洲第一| 亚洲精品无码av天堂| 亚洲午夜久久久久久久久电影网| 国产成人麻豆亚洲综合无码精品 | 亚洲福利秒拍一区二区| 亚洲成a人片7777| 一本色道久久88亚洲精品综合| 亚洲一区二区三区丝袜| 亚洲高清一区二区三区电影| 国产天堂亚洲精品| 中国亚洲女人69内射少妇| 亚洲AV成人片色在线观看| 亚洲日本国产乱码va在线观看| 亚洲专区中文字幕| 亚洲狠狠色丁香婷婷综合|