<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
官網:開源搜尋:Elasticsearch、ELK Stack 和 Kibana 的開發者 | Elastic
https://www.elastic.co/cn/
令人記憶深刻的口號:能夠發現意料之中以及意料之外的情況
Elasticsearch也是基於Lucene的全文檢索庫,本質也是儲存資料,很多概念與MySQL類似的。是一種全文檢索技術。
Elasticsearch 是位於 Elastic Stack 核心的分散式搜尋和分析引擎。Logstash 和 Beats 有助於收集、聚合和豐富您的資料並將其儲存在 Elasticsearch 中。Kibana 使您能夠以互動方式探索、視覺化和分享對資料的見解,並管理和監控堆疊。Elasticsearch 是索引、搜尋和分析魔法發生的地方。
Elasticsearch 是一個基於JSON的分散式搜尋和分析引擎。
Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放原始碼釋出,是一種流行的企業級搜尋引擎。Elasticsearch用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。
索引(indices)--------------------------------Databases 資料庫
型別(type)-----------------------------Table 資料表
檔案(Document)----------------Row 行
欄位(Field)-------------------Columns 列
概念 | 說明 |
索引庫(indices) | indices是index的複數,代表許多的索引, |
型別(type) | 型別是模擬mysql中的table概念,一個索引庫下可以有不同型別的索引,比如商品索引,訂單索引,其資料格式不同。不過這會導致索引庫混亂,因此未來版本中會移除這個概念 |
檔案(document) | 存入索引庫原始的資料。比如每一條商品資訊,就是一個檔案 |
欄位(field) | 檔案中的屬性 |
對映設定(mappings) | 欄位的資料型別、屬性、是否索引、是否儲存等特性 |
took:查詢花費時間,單位是毫秒
time_out:是否超時
_shards:分片資訊
hits:搜尋結果總覽物件
total:搜尋到的總條數
max_score:所有結果中檔案得分的最高分
hits:搜尋結果的檔案物件陣列,每個元素是一條搜尋到的檔案資訊
_index:索引庫
_type:檔案型別
_id:檔案id
_score:檔案得分
_source:檔案的源資料
<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>
spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 192.168.7.132:9300
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 { @Id private Long id; /** * 標題 */ @Field(type = FieldType.Text,analyzer = "ik_max_word") private String title; * 分類 @Field(type = FieldType.Keyword) private String category; * 品牌 private String brand; * 價格 @Field(type = FieldType.Double) private Double price; * 圖片地址 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) { @Override public String toString() { return "Item{" + "id=" + id + ", title='" + title + ''' + ", category='" + category + ''' + ", brand='" + brand + ''' + ", price=" + price + ", images='" + images + ''' + '}'; }
這裡需要繼承介面-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); }
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的模板類 private ItemRepository itemRepository;//Item的增刪改查 /** * 建立索引庫 */ @Test public void testIndex(){ this.elasticsearchTemplate.createIndex(Item.class); this.elasticsearchTemplate.putMapping(Item.class); //this.elasticsearchTemplate.deleteIndex(); } * 插入與更新 public 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); * 刪除 public void testDelete(){ Item item=new Item(1L,"小米手機9","手機","小米",3999.00,"https:www.baidu.com"); this.itemRepository.delete(item); * 查詢 public 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); * 呼叫自定義方法 public 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)); * 批次插入 public void indexList() { 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); * 高階查詢 public void testSearch(){ //通過查詢構建器工具構建--重點:QueryBuilders:詞條、模糊、範圍 MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手機"); //獲取結果集 Iterable<Item> items = this.itemRepository.search(queryBuilder); items.forEach(System.out::println); * 重點--自定義查詢 public 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)); * 重點--分頁查詢 public void testPage(){ queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機")); queryBuilder.withPageable(PageRequest.of(1,2)); * 重點--排序 public void testSort(){ queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC)); }
到此這篇關於SpringBoot整合Elasticseach的文章就介紹到這了,更多相關SpringBoot整合Elasticseach內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45