es0102---語法格式、數據類型、整合springboot、創建庫、創建映射、新增數據、自定義查詢

ES

一、創建映射字段的語法格式

需要先構建索引庫,在構建索引庫中的映射關系

PUT /索引庫名/_mapping
{"properties": {"字段名": {"type": "類型","index": true,"store": false,"analyzer": "分詞器"}}
}

#新增數據  id自增
POST /hl/_doc
{"title":"小米手機","images":"http://image.lano.com/12479122.jpg","price":2699.00
}#自己指定id信息
POST /hl/_doc/2
{"title":"OPPO手機","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#修改數據
POST /hl/_doc/2
{"title":"VIVO手機","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#智能判斷 根據數據自動添加到映射,判斷并指定數據類型
POST /hl/_doc/3
{"title":"超米手機","images":"http://image.lanou.com/12479122.jpg","price":2899.00,"stock": 200,"saleable":true
}put /hl/_doc/4
{"title":"小米電視AAA","images":"http://image.lano.com/12479122.jpg","price":2999.00
}#查詢數據
GET hl/_search
{"query": {"match_all": {}}
}#or查詢數據  小米or電視
GET hl/_search
{"query": {"match": {"title": "小米電視"}}
}
# and查詢
GET hl/_search
{"query": {"match": {"title": {"query": "小米電視","operator": "and"}}}
}PUT /hl/_doc/5
{"title":"樂視電視","images":"http://image.lanou.com/12479122.jpg","price":2899.00,"subTitle":"小米電視手機"
}#多字段查詢
GET hl/_search
{"query": {"multi_match": {"query": "小米","fields": [ "title", "subTitle" ]}}
}
#單詞條精準查詢
GET /hl/_search
{"query":{"term":{"price":2699.00}}
}
#多詞條精準查詢
GET /hl/_search
{"query":{"terms":{"price":[2699.00,2899.00]}}
}
#只查詢特定字段
GET /hl/_search
{"_source": ["title","price"],"query": {"term": {"price": 2699}}
}
#只查詢特定字段  指定includes和excludes
GET hl/_search
{
"_source": {
"excludes": "images",
"includes": ["title","price"]
},
"query": {
"term": {
"price": 2899.00
}
}
}PUT /hl/_doc/6
{"title":"apple手機","images":"http://image.lanou.com/12479122.jpg","price":6899.00
}
#模糊半徑為1查詢
GET hl/_search
{"query": {"fuzzy": {"title": "app"}}
}#模糊半徑為2查詢
GET hl/_search
{"query": {"fuzzy": {"title": {"value": "app22","fuzziness": 2}}}
}
  • 類型名稱:映射的名稱,字段名:任意填寫。Elasticsearch7.0之后不支持類名名稱寫法所以需要添加include_type_name=true參數進行支持設置。

  • type:類型,可以是text、long、short、date、integer、object等

  • index:是否可以使用索引查詢,默認為true

  • store:是否額外存儲,默認為false

  • analyzer:分詞器,這里的ik_max_word即使用ik分詞器

二、了解數據類型

1、字符串

text: 可分詞 不可聚合

keyword:不可分詞 可聚合

2、數值

整數和浮點(float、double、half_float、scaled_float)

3、日期

date

三、使用springboot創建es項目

1、jar包

spring-boot-starter-data-elasticsearch

2、配置文件

spring:
? elasticsearch:
?? uris: http://1.94.230.82:9200

3、使用esTemplate模版工具類

@RestController
@RequestMapping("/es")
public class EsController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;

四、Es實現的功能

1、創建索引庫

restTemplate.indexOps(User.class).create();

/*
@Document(indexName = "索引庫名",shards = 分片數,replicas = 副本數)*/
@Document(indexName = "user",shards = 1,replicas = 0)
public class User {
}
?
package com.hl.es.web;
?
import com.hl.es.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
?
@RestController
@RequestMapping("/es")
public class EsController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;
?@RequestMapping("/test")public void getEsTemplate(){boolean flag = restTemplate.indexOps(User.class).exists();System.out.println("索引庫是否存在:"+flag);if(!flag){//創建索引庫boolean flag2 = restTemplate.indexOps(User.class).create();System.out.println("索引庫創建結果:"+flag2);}}
}

2、創建映射

@Document(indexName = "user",shards = 1,replicas = 0)
@Data
public class User {@Idprivate Integer id;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String username;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String desc;@Field(type = FieldType.Keyword,index = false)private String password;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String address;@Field(type = FieldType.Double)private Double money;@Field(type = FieldType.Date,format = DateFormat.custom,pattern = "YYYY-MM-dd")private Date createTime;
}
@RequestMapping("/createMapping")
public Object createMapping(){Document document = restTemplate.indexOps(User.class).createMapping();boolean flag = restTemplate.indexOps(User.class).putMapping(document);System.out.println("創建映射:"+flag);return flag;
}

3、新增數據

@RequestMapping("/save")
public Object save(User user){User user2 = restTemplate.save(user);return user2;
}

4、查詢數據

自定義查詢
package com.hl.es.dao;
?
import com.hl.es.pojo.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
?
import java.util.List;
?
public interface UserDaoextends ElasticsearchRepository<User, Integer> {//根據用戶名查詢集合//單字段public List<User> findByUsername(String username);public List<User> findByAddress(String address);//多字段public List<User> findByDescAndAddress(String desc, String address);public List<User> findByDescOrAddress(String desc, String address);//范圍查詢public List<User> findAllByIdGreaterThanEqual(Integer minId);public List<User> findByMoneyBetween(Double minPrice, Double maxPrice);//先根據范圍查詢,再降序排序public List<User> findByMoneyBetweenOrderByMoneyDesc(Double minPrice, Double maxPrice);
?
}
高級查詢

1、分頁查詢

2、聚合查詢

3、高亮查詢

//高亮處理
@Highlight(fields = {@HighlightField(name = "desc"),@HighlightField(name = "address"),@HighlightField(name = "username")},parameters = @HighlightParameters(preTags = {"<span style='color:red'>"},postTags = {"</span>"})
)
public List<SearchHit<User>> findByDescOrAddressOrUsername(String desc, String address, String username);

五、es專業名詞

節點

分片

副本

索引

六、mysq+es的數據同步

  • 使用Logstash實現Mysql與ElasticSearch實時同步。

  • 使用go-mysql-elasticsearch實現Mysql與ElasticSearch實時同步。

  • 使用RabbitMQ實現Mysql與ElasticSearch實時同步。

  • 使用阿里巴巴Canal實現Mysql與ElasticSearch實時同步。

當前項目

主數據庫: mysql 事務機制

輔助數據庫:redis (小數據量的頻繁訪問 內存 首頁商品分類 推薦商品)

es(大量數據的檢索 模糊查詢 | 數據來自于多個字段 百度搜索 商城的搜索)

mysql:商品表

redis:查詢mysql中的數據,新增到redis

mysql------------------》es

方法(saveToMysql -->mq--> saveToEs )(updateToMysql -->mq--->updateToEs ) (deleteToMysql deleteToEs)

項目上線:首次同步,批量同步

項目運行:增量同步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90389.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring boot h2數據庫無法鏈接問題

spring boot h2數據庫無法鏈接問題datasource:# 數據庫連接地址&#xff1a;H2在2.x后&#xff0c;不再支持創建數據庫&#xff0c;需要手工創建&#xff0c;如&#xff1a;touch test.mv.db&#xff0c;# 否則會報“Database file not found”錯誤url: jdbc:h2:file:~/testdri…

pycharm配conda環境

最近在做表情包&#xff0c;畫出來的表情包大小不一&#xff0c;但是vx表情包平臺要求統一都是240*240的&#xff0c;所以用Pillow統一處理的一下。 如果你本地裝的python并且添加到path了&#xff0c;pycharm可以自動獲取到&#xff0c;但是我裝得miniconda&#xff0c;pychar…

【Elasticsearch】Elasticsearch 跨機房部署

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜&#xff1a;性能與成本平衡原理公式解析3?? ILM&#xff08;Index Lifecycle Management&#xff09;策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

立式數控深孔鉆的工藝及光學檢測方法 —— 激光頻率梳 3D 輪廓檢測

引言立式數控深孔鉆作為深孔加工的關鍵設備&#xff0c;其工藝水平直接影響零件加工質量。深孔加工面臨排屑、散熱等挑戰&#xff0c;而光學檢測技術的發展為深孔加工精度控制提供了新途徑。激光頻率梳 3D 輪廓檢測技術與立式數控深孔鉆工藝的結合&#xff0c;實現了深孔加工與…

【YOLO系列】YOLOv4詳解:模型結構、損失函數、訓練方法及代碼實現

YOLOv4詳解&#xff1a;模型結構、損失函數、訓練方法及代碼實現 motivation YOLO系列作者Joseph Redmon與Alexey Bochkovskiy致力于解決目標檢測領域的核心矛盾&#xff1a;精度與速度的平衡。YOLOv4的誕生源于兩大需求&#xff1a; 工業落地&#xff1a;在移動端/邊緣設備…

chromedriver下載與安裝方法

chromedriver下載地址&#xff1a; 版本在&#xff1a;http://chromedriver.storage.googleapis.com/index.html 這是下載后&#xff1a; 把exe文件復制到瀏覽器的安裝目錄下 把exe文件復制到python的安裝目錄下 配置環境變量:此電腦→右擊屬性→高級系統設置→環境變量→用戶…

基于QT(C++)實現(圖形界面)選課管理系統

選課管理系統1 概述1.1 課程設計目的和意義根據課程大綱設定&#xff0c;面向對象課程設計的目的是&#xff1a;&#xff08;1&#xff09;理解面向對象的基本思想和三大機制&#xff0c;掌握基于 C 語法的面向對象的基 本概念和開發模式&#xff0c;熟練運用面向對象思維模式…

【阿里云-ACP-1】疑難題解析

1.彈性伸縮 AS 在企業中有廣泛的應用場景,不僅適合業務量不斷波動的應用程序,同時也適合業務量穩定的應用程序。以下關于彈性伸縮的使用說法正確的是( ) 選項內容 A 彈性伸縮可以用于云數據庫 RDS 的自動擴容 B 彈性伸縮支持自動將 ECS 實例或 ECI 實例添加到 Memcache 實…

NLP:seqtoseq英譯法案例

本文目錄&#xff1a;一、案例概述二、數據集三、案例步驟&#xff08;一&#xff09;導入工具包和工具函數&#xff08;二&#xff09;數據預處理&#xff08;三&#xff09;構建數據源對象&#xff08;四&#xff09;構建數據迭代器&#xff08;五&#xff09;構建基于GRU的編…

docker的準備與部署

docker的重復使用bilibli 黑馬視頻 方便查看docker容器。設置格式通過官網dock查看格式命令 命令別名&#xff0c;簡化輸入

Java 大視界 -- Java 大數據在智能教育自適應學習路徑規劃與學習效果強化中的應用(362)

Java 大視界 -- Java 大數據在智能教育自適應學習路徑規劃與學習效果強化中的應用(362) 引言: 正文: 一、Java 構建的智能教育數據架構 1.1 多維度學習數據實時采集 1.2 知識圖譜構建與知識點關聯 二、Java 驅動的自適應學習路徑規劃 2.1 多模型融合的路徑生成 2.2 學習效果…

2.1 為什么定義tensor數據結構?

PyTorch選擇定義Tensors而非直接使用NumPy進行運算和數據處理&#xff0c;主要是因為Tensors在功能、性能和場景適配性上更貼合深度學習的需求。以下是關鍵原因分析&#xff1a; 1. 自動求導與計算圖支持 核心差異&#xff1a;PyTorch的Tensors在運算時會自動構建計算圖&#x…

Qt Quick 3D渲染

Qt Quick 3D是Qt框架中用于創建3D圖形界面的強大模塊&#xff0c;它提供了聲明式的QML API&#xff0c;使得開發者無需深入底層圖形API就能構建復雜的3D場景。本文將全面介紹Qt Quick 3D的核心概念和技術細節&#xff0c;包括3D場景坐標系統、場景環境設置、光照與材質系統、相…

筆試——Day17

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼第一題 題目 小樂樂改數字 思路 模擬 當前位置為偶數時&#xff0c;改為0&#xff1b;否則改為1記得取出前導0&#xff1b;stoi()函數可以直接自動去除前導0 代碼 第二題 題目&a…

【c#】完美解決部署IIS 報錯 0x8007000d

1、錯誤頁面&#xff1a;2、解決思路&#xff1a; 1、點擊IIS站點&#xff0c;右鍵點擊瀏覽到文件夾下&#xff0c;路徑打開cmd&#xff0c;找到對應的站點的dll&#xff0c;運行失敗會提示錯誤原因。需要安裝某些dll2、選中站點&#xff0c;點擊模塊&#xff0c;檢查模塊AspNe…

Visual Studio 2010-.Net Framework 4.0項目-NPOI安裝

在管理Nuget程序包中搜索NPOI&#xff0c;下載最新版會報錯&#xff1a;使用程序包控制臺輸入&#xff1a;Install-Package NPOI -Version 2.5.1

Redis原理之分布式鎖

上篇文章&#xff1a; Redis原理之緩存https://blog.csdn.net/sniper_fandc/article/details/149141968?fromshareblogdetail&sharetypeblogdetail&sharerId149141968&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link??????? 目錄 1 …

網絡基礎19:OSPF單區域原理實驗

一、實驗拓撲二、設備配置AR1 配置<AR1> system-view [AR1] interface GigabitEthernet0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.1.1 24 [AR1-GigabitEthernet0/0/0] quit[AR1] ospf 1 router-id 0.0.0.1 [AR1-ospf-1] area 0 [AR1-ospf-1-area-0.0.0.0] ne…

【實戰推薦】小白也能上手的多端陪玩系統平臺項目源碼

在當今的游戲市場中&#xff0c;游戲陪玩服務已經成為了一個熱門領域。無論是尋找高手帶自己升級、學習游戲技巧&#xff0c;還是僅僅想找人一起玩耍&#xff0c;越來越多的玩家傾向于通過專業的陪玩平臺找到合適的伙伴。對于想要進入這個市場的創業者和開發者來說&#xff0c;…

[hot 100 ]最長連續序列-Python3

需要時間復雜度為O(n)&#xff0c;如果采用暴力求解則為O(n^2)1.在遍歷hash表的時候檢查是否當前值為連續序列的最小值,如果是&#xff0c;則跳過此次循環,這樣使得原本需要對每個值進行一次遍歷變成了對每個值只訪問一次:2.使用set()和普通for num in nums的區別&#xff1a;