目錄
一、Elasticseach介紹
1.簡單介紹
2.對比關系:
3.詳細說明:
4.查出資料的解釋
二、SpringBoot集成Elasticseach
1.引入依賴
2.添加配置
3.創建pojo類與索引對應
4.SpringData封裝了基礎的增刪改查,自定義增刪改查
5.測驗方法--增刪改查
如果本篇博客對您有一定的幫助,大家記得留言+點贊+收藏哦,
一、Elasticseach介紹
1.簡單介紹
官網:開源搜索:Elasticsearch、ELK Stack 和 Kibana 的開發者 | Elastic
https://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: elasticsearch
cluster-nodes: 192.168.7.132:9300
3.創建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 {
@Id
private 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;
}
@Override
public 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 {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;//ES的模板類
@Autowired
private ItemRepository itemRepository;//Item的增刪改查
/**
* 創建索引庫
*/
@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,"小米手機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);
}
/**
* 洗掉
*/
@Test
public void testDelete(){
Item item=new Item(1L,"小米手機9","手機","小米",3999.00,"https:www.baidu.com");
this.itemRepository.delete(item);
}
/**
* 查詢
*/
@Test
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);
}
/**
* 呼叫自定義方法
*/
@Test
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));
}
/**
* 批量插入
*/
@Test
public 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);
}
/**
* 高級查詢
*/
@Test
public void testSearch(){
//通過查詢構建器工具構建--重點:QueryBuilders:詞條、模糊、范圍
MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手機");
//獲取結果集
Iterable<Item> items = this.itemRepository.search(queryBuilder);
items.forEach(System.out::println);
}
/**
* 重點--自定義查詢
*/
@Test
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));
}
/**
* 重點--分頁查詢
*/
@Test
public 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));
}
/**
* 重點--排序
*/
@Test
public 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));
}
}
如果本篇博客對您有一定的幫助,大家記得留言+點贊+收藏哦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425065.html
標籤:其他
上一篇:Zookeeper的使用記錄
