javascript
SpringBoot集成Elasticseach
目錄
一、Elasticseach介紹
1.簡單介紹
2.對比關系:
3.詳細說明:
4.查出數據的解釋
?二、SpringBoot集成Elasticseach
1.引入依賴
2.添加配置
3.創建pojo類與索引對應
4.SpringData封裝了基礎的增刪改查,自定義增刪改查
5.測試方法--增刪改查
如果本篇博客對您有一定的幫助,大家記得留言+點贊+收藏哦。?
一、Elasticseach介紹
1.簡單介紹
官網:開源搜索:Elasticsearch、ELK Stack 和 Kibana 的開發者 | Elastichttps://www.elastic.co/cn/
ElasticSeach詳細安裝教程--圖文介紹超詳細:ElasticSeach詳細安裝教程--圖文介紹超詳細_小小張自由—>張有博-CSDN博客ElasticSeach詳細安裝教程--圖文介紹超詳細。?Elasticsearch 是一個分布式、RESTful 風格的搜索和數據分析引擎,能夠解決不斷涌現出的各種用例。 作為 Elastic Stack 的核心,它集中存儲您的數據,幫助您發現意料之中以及意料之外的情況。Elasticsearch 是一個基于JSON的分布式搜索和分析引擎。https://blog.csdn.net/promsing/article/details/122722302
令人記憶深刻的口號:能夠發現意料之中以及意料之外的情況
Elasticsearch也是基于Lucene的全文檢索庫,本質也是存儲數據,很多概念與MySQL類似的。是一種全文檢索技術。
Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和豐富您的數據并將其存儲在 Elasticsearch 中。Kibana 使您能夠以交互方式探索、可視化和分享對數據的見解,并管理和監控堆棧。Elasticsearch 是索引、搜索和分析魔法發生的地方。
Elasticsearch 是一個基于JSON的分布式搜索和分析引擎。
Elasticsearch是用Java語言開發的,并作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。Elasticsearch用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
2.對比關系:
索引(indices)--------------------------------Databases 數據庫類型(type)-----------------------------Table 數據表文檔(Document)----------------Row 行字段(Field)-------------------Columns 列3.詳細說明:
| 概念 | 說明 |
| 索引庫(indices) | indices是index的復數,代表許多的索引, |
| 類型(type) | 類型是模擬mysql中的table概念,一個索引庫下可以有不同類型的索引,比如商品索引,訂單索引,其數據格式不同。不過這會導致索引庫混亂,因此未來版本中會移除這個概念 |
| 文檔(document) | 存入索引庫原始的數據。比如每一條商品信息,就是一個文檔 |
| 字段(field) | 文檔中的屬性 |
| 映射配置(mappings) | 字段的數據類型、屬性、是否索引、是否存儲等特性 |
4.查出數據的解釋
?took:查詢花費時間,單位是毫秒
?time_out:是否超時
?_shards:分片信息
?hits:搜索結果總覽對象?
? ?total:搜索到的總條數
? ?max_score:所有結果中文檔得分的最高分
? ?hits:搜索結果的文檔對象數組,每個元素是一條搜索到的文檔信息?
? ? ?_index:索引庫
? ? ?_type:文檔類型
? ? ?_id:文檔id
? ? ?_score:文檔得分
? ? ?_source:文檔的源數據
?二、SpringBoot集成Elasticseach
1.引入依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>2.添加配置
spring:data:elasticsearch:cluster-name: elasticsearchcluster-nodes: 192.168.7.132:93003.創建pojo類與索引對應
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;/*** 創建pojo類與索引對應** @author Promsing(張有博)* @version 1.0.0* @since 2022/1/26 - 20:35*/ @Document(indexName = "item", type = "docs", shards = 1, replicas = 0) public class Item {@Idprivate Long id;/*** 標題*/@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;/*** 價格*/@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;}@Overridepublic String toString() {return "Item{" +"id=" + id +", title='" + title + '\'' +", category='" + category + '\'' +", brand='" + brand + '\'' +", price=" + price +", images='" + images + '\'' +'}';} }4.SpringData封裝了基礎的增刪改查,自定義增刪改查
這里需要繼承接口-ItemRepository?
/*** 自定義的增刪改查接口** @author Promsing(張有博)* @version 1.0.0* @since 2022/1/27 - 15:10*/ public interface ItemRepository extends ElasticsearchRepository<Item,Long> {List<Item> findByTitle(String title);List<Item> 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 {@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;//ES的模板類@Autowiredprivate ItemRepository itemRepository;//Item的增刪改查/*** 創建索引庫*/@Testpublic void testIndex(){this.elasticsearchTemplate.createIndex(Item.class);this.elasticsearchTemplate.putMapping(Item.class);//this.elasticsearchTemplate.deleteIndex();}/*** 插入與更新*/@Testpublic void testCreate(){Item item = new Item(1L,"小米手機9","手機","小米",3999.00,"https:www.baidu.com");Object save = this.itemRepository.save(item);List<Item> list = new ArrayList<>();list.add(new Item(2L, "堅果手機R1", " 手機", "錘子", 3699.00, "http://image.leyou.com/123.jpg"));list.add(new Item(3L, "華為META10", " 手機", "華為", 4499.00, "http://image.leyou.com/3.jpg"));// 接收對象集合,實現批量新增Iterable<Item> items = itemRepository.saveAll(list);System.out.println(items);}/*** 刪除*/@Testpublic void testDelete(){Item item=new Item(1L,"小米手機9","手機","小米",3999.00,"https:www.baidu.com");this.itemRepository.delete(item);}/*** 查詢*/@Testpublic void testFind(){System.out.println("-----主鍵查詢------");Optional<Item> byId = this.itemRepository.findById(1L);System.out.println(byId.get());System.out.println("-----查詢全部------");Iterable<Item> all = this.itemRepository.findAll();all.forEach(i-> System.out.println(i));System.out.println("-----排序查詢(升序降序)------");Iterable<Item> price = this.itemRepository.findAll(Sort.by("price").descending());price.forEach(System.out::println);}/*** 調用自定義方法*/@Testpublic void testFindByU(){List<Item> phone = this.itemRepository.findByTitle("手機"); // phone.forEach(i->{ // System.out.println(i); // });List<Item> byPriceBetween = this.itemRepository.findByPriceBetween(4000.0, 5000.0);byPriceBetween.forEach(i-> System.out.println(i));}/*** 批量插入*/@Testpublic void indexList() {List<Item> list = new ArrayList<>();list.add(new Item(1L, "小米手機7", "手機", "小米", 3299.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(2L, "堅果手機R1", "手機", "錘子", 3699.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(3L, "華為META10", "手機", "華為", 4499.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(4L, "小米Mix2S", "手機", "小米", 4299.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(5L, "榮耀V10", "手機", "華為", 2799.00, "http://image.leyou.com/13123.jpg"));// 接收對象集合,實現批量新增itemRepository.saveAll(list);}/*** 高級查詢*/@Testpublic void testSearch(){//通過查詢構建器工具構建--重點:QueryBuilders:詞條、模糊、范圍MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手機");//獲取結果集Iterable<Item> items = this.itemRepository.search(queryBuilder);items.forEach(System.out::println);}/*** 重點--自定義查詢*/@Testpublic void testNative(){// 構建自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 添加基本查詢條件queryBuilder.withQuery(QueryBuilders.matchQuery("title","手機"));// 查詢分頁結果集Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());System.out.println(itemPage.getTotalPages());System.out.println(itemPage.getTotalElements());itemPage.forEach(i-> System.out.println(i));}/*** 重點--分頁查詢*/@Testpublic void testPage(){// 構建自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 添加基本查詢條件queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機"));queryBuilder.withPageable(PageRequest.of(1,2));// 查詢分頁結果集Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());System.out.println(itemPage.getTotalPages());System.out.println(itemPage.getTotalElements());itemPage.forEach(i-> System.out.println(i));}/*** 重點--排序*/@Testpublic void testSort(){// 構建自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 添加基本查詢條件queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機"));queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));// 查詢分頁結果集Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());System.out.println(itemPage.getTotalPages());System.out.println(itemPage.getTotalElements());itemPage.forEach(i-> System.out.println(i));} }如果本篇博客對您有一定的幫助,大家記得留言+點贊+收藏哦。?
總結
以上是生活随笔為你收集整理的SpringBoot集成Elasticseach的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机对逻辑算符的运算次序,逻辑运算符的
- 下一篇: 法语初级学习笔记-04-单词