**這篇是前幾年的筆記, 有些在7.x用不了了**
https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
**從6.x開始每個索引只能使用一個類型(type), 并且未來將去掉類型(type)
6.x 很多地方要加 _doc**
1. 索引
1.1 添加索引
PUT product
返回
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "product"
}
1.2 創建 mapping 映射
ES中創建一個mapping映射類似于在數據庫中定義表結構,即表里面有哪些字段、字段是什么類型、字段的默認值等;也類似于solr里面的模式schema的定義
未創建索引的情況下
"type" : "text", 表示是文本類型, 會被分詞
"type" : "keyword", 和text 類似, 但不會被分詞, 值將作為一個整體
"index": false 表示不會被查詢
PUT product
{
"mappings" : {
"properties" : {
"name" : {
"type" : "text",
"index": true
},
"desc": {
"type" : "text"
},
"price" : {
"type" : "keyword",
"index": true
},
"producer": {
"type" : "text"
},
"ssss": {
"type" : "text",
"index": false
}
}
}
}
為已存在的索引創建或創建mappings
目前6.x 不使用_doc 會報錯 "reason": "Validation Failed: 1: mapping type is missing;"
POST /product/_doc/_mapping
{
"properties": {
"name": {
"type": "text",
"index": true
}
}
}
GET?????/hp_goods/_doc/_search
// null_value 是加默認值
PUT??/hp_goods/_doc/_mapping
{
??"properties":?{
????"isDel":?{
??????"type":?"integer",
??????"null_value":?0
????}
??}
}
1.3 mapping 增加數據
值一旦創建, 無法修改, 只能添加新值
如 tag 已經有了, 則無法修改其內容, 只能新增tags
POST /product/_doc/_mapping
{
"properties": {
"tags": {
"type": "text"
}
}
}
或者
POST /product
{
"mappings": {
"properties": {
"tags": {
"type": "text"
}
}
}
}
1.4 遷移數據
properties 里的具體值 一旦新建則無法修改
如果必須修改則要重建索引
需要新建 index 索引, 把之前的index 數據遷移到新的索引
獲取當前 index 的結構
GET /product/_mapping
新建新的索引, 結構從上面復制進行修改
POST /newproduct
{
"mappings": {
"properties": {
"tags": {
"type": "text"
}
}
}
}
遷移
1.5 刪除索引
DELETE product
2 文檔
2.1 添加文檔
PUT /product/_doc/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer": "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
2.2 刪除文檔
DELETE /product/_doc/1
2.3 修改文檔
局部修改
POST 方式 id后面跟著 /_update, 里面使用 doc 包裹數據
POST /product/_doc/1/_update
{
"doc": {
"price" : 50
}
}
// 7.4 版本, 現在是這樣修改
POST /product/_update/1
{
"doc": {
"price": 50
}
}
全量修改
和添加時的代碼結構是一樣的, 如果數據和添加時的數據不一樣, 不同的部門會刪除掉
"price" : 30, 在這里就被刪除了
PUT /product/_doc/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"producer": "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
每次修改后,version會更改, 同一個文檔連續多次刪除, version也會累加
2.4 簡單查詢
2.4.1 查詢全部
GET /product/_doc/_search
hits 查詢到的數據信息
_score 是數據的匹配度
_source 是返回的數據的哪些字段, 默認全部(類似數據庫的 * )
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "product",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
},
{
"_index": "product",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 50,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
}
]
}
}
2.4.2 判斷數據是否存在
不存在返回404狀態碼
HEAD /product/_doc/11
存在返回200狀態碼
HEAD /product/_doc/1
2.4.3 定制返回的字段(_source) 多個用 , 逗號隔開
返回的_source結果只會有name,desc
GET /product/_doc/_search?_source=name,desc
3. 樂觀鎖并發控制
6.7 以前 使用version , 以后用 if_seq_no=2&if_primary_term=1
當給一個新增加的數據做更新操作時, 第一次更新可以完成, 因為version=1是當前版本號,
當第二次更新時, 由于版本號傳還是1, 但是實際最新的已經是2了, 會報版本沖突錯誤.
改為最新的才會成功.
用于解決并發問題, 倆個客戶端, 都傳version=1, 當一個修改成功后, version為2了,
另一個就會更新失敗
高版本es 把 version 換為 if_seq_no和if_primary_term
POST /product/_doc/1/_update?version=1
{
"doc": {
"price" : 51
}
}
對于if_primary_term記錄的就是具體的哪個主分片,
而if_seq_no這個參數起的作用和舊版本中的_version是一樣的
4. DSL 查詢
4.1 term查詢
term 不會把查詢條件進行分詞后查詢, 作為一整個關鍵詞去搜索
POST /shop/_doc/_search
{
"query":{
"term":{
"desc":"中國"
}
}
}
4.2 查詢表達式分詞搜索
是條件分詞查詢, 先把查詢條件進行分詞后查詢
term 換成 match, 條件被分詞了, 查詢結果變了
POST /shop/_doc/_search
{
"query":{
"match":{
"desc":"中國"
}
}
}
4.3 多個詞語匹配檢索
相當于是tag標簽查詢, 所有帶數組里其中一個詞語的數據, 就會被查詢到
POST /shop/_doc/_search
{
"query":{
"terms":{
"desc": ["中國", "學生"]
}
}
}
4.4 短語搜索
match_phrase的分詞結果必須在text字段分詞中都包含,而且順序必須相同,而且必須且都是連續的
POST /shop/_doc/_search
{
"query" : {
"match_phrase" : {
"desc" : "導游坐飛機去海外旅游"
}
}
}
4.5 查詢全部 match_all
POST /shop/_doc/_search
{
"query": {
"match_all": {}
},
"_source": ["id", "nickname", "age"]
}
4.6 使用過濾器的模糊查詢
gte >=
gt >
lte <=
lt <
POST /shop/_doc/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"nickname" : "飛翔"
}
},
"filter": {
"range" : {
"age" : { "gt" : 19 }
}
}
}
}
}
4.7 分頁查詢
from 起始查詢索引
size 每次返回數量
POST /shop/_doc/_search
{
"query": {
"match_all": {}
},
"_source": [
"id",
"nickname",
"age"
],
"from": 2,
"size": 10,
"sort": ["age"]
}
4.8 match(operator)
"operator":
or:搜索內容分詞后,只要存在一個詞語匹配就展示結果
and:搜索內容分詞后,都要滿足詞語匹配
POST /shop/_doc/_search
{
"query" : {
"match" : {
"desc" : {
"query": "學習慕課網",
"operator": "or"
}
}
}
}
minimum_should_match: 最低匹配精度,至少有[分詞后的詞語個數]x百分百,得出一個數據值取整。舉個例子:當前屬性設置為70,若一個用戶查詢檢索內容分詞后有10個詞語,那么匹配度按照 10x70%=7,則desc中至少需要有7個詞語匹配,就展示;若分詞后有8個,則 8x70%=5.6,則desc中至少需要有5個詞語匹配,就展示。
minimum_should_match 也能設置具體的數字,表示個數
POST /shop/_doc/_search
{
"query": {
"match": {
"desc": {
"query": "女友生日送我好玩的xbox游戲機",
"minimum_should_match": "60%"
}
}
}
}
4.9 ids查詢
POST /shop/_doc/_search
{
"query": {
"ids": {
"type": "_doc",
"values": ["1001", "1010", "1008"]
}
}
}
4.10 multi_match
滿足使用match在多個字段中進行查詢的需求
POST /shop/_doc/_search
{
"query" : {
"multi_match" : {
"query": "慕課網",
"fields": [
"desc",
"nickname"
]
}
}
}
4.11 boost
權重, 為某個字段設置權重,權重越高,文檔相關性得分就越高。通暢來說搜索商品名稱要比商品簡介的權重更高。
POST /shop/_doc/_search
{
"query": {
"multi_match": {
"query": "皮特帕克慕課網",
"fields": ["desc", "nickname^10"]
}
}
}
nickname^10 代表搜索提升10倍相關性,也就是說用戶搜索的時候其實以這個nickname為主,desc為輔,nickname的匹配相關度當然要提高權重比例了。
- 學習地址
- MySQL
- 查詢優化
- SQL優化
- 關于or、in、not in、!=等走不走索引的說明
- 千萬級數據查詢優化
- MySQL 深度分頁問題
- 嵌套循環 Block Nested Loop 導致索引查詢慢
- MySQL增加日志統計表優化各種日志表的統計功能
- MySQL單機讀寫QPS(性能)優化
- sqlMode 置 select 的值可以比 group 里的多
- drop、delete、truncate的區別
- 尚硅谷MySQL數據庫高級學習筆記
- MySQL架構
- 事務部分
- MySQL知識點
- mysql索引
- Linux docker安裝 mysql 8.0.25
- docker 安裝mysql 5.7
- mysql Field ‘xxx’ doesn’t have a default value
- mysql多實例
- docker中的sql文件導入
- mysql進階知識
- mysql字符集
- 連接的原理
- redo日志
- InnoDB存儲引擎
- InnoDB的數據存儲結構
- B+樹索引
- 文件系統-表空間
- Buffer Pool
- 億級數據導入到es
- MySQL數據復制
- MySQL缺少主鍵的表數據
- mysql update 其中更新的字段根據另一個更新字段作為條件去更新
- MySQL指定字段值排序(將指定值排在前面)
- 設置MySQL連接數、時區
- Navicat15右鍵刪除數據刷新就又恢復了
- MySQL替換字段部分內容
- Java和MySQL統計本周本月本季和年
- 分頁時order by 排序數據重復,丟失
- mysql同一張表根據某個字段刪除重復數據
- mysqldump定時全量熱備
- 專題總結
- 事務
- MySQL事務
- spring事務
- spring事務本類調用
- spring事務傳播行為
- spring事務失效問題
- 鎖和Transactional注解一塊使用的問題
- 數據安全
- 敏感數據
- SQL注入
- 數據源
- XSS
- 接口設計
- 緩存設計
- 限流
- 自定義注解實現根據用戶做QPS限流
- 架構
- 高可用
- Java
- Unsatisfied dependency expressed through field ‘baseMapper‘
- mybatisplus多數據源
- 單個字母前綴的java變量
- spring
- spring循環依賴解決
- 事務@Transactional
- yml 文件配置信息綁定到java工具類的靜態變量上
- @Configuration @Component 區別
- springboot啟動yml文件報錯
- spring方法重試注解Retryable
- spring讀取yml集合數據
- spring自定義注解
- 獲取resource下的圖片資源
- 手機號和電話號的正則驗證
- 獲取字符串中的數字
- mybatis
- mybatis多參數添加數據并返回主鍵
- 統一異常處理
- 分組校驗
- Java讀取Python json.dumps 函數保存的redis數據
- springboot整合springCache
- 若依mybatis值為null的字段沒有返回
- 若依
- 接口白名單
- @JsonFormat時區問題
- RequestParam.value() was empty on parameter 0
- jdk8和hutool請求第三方的https報錯
- springMVC
- springMVC與vue使用post傳數組
- elementUI 時間組件報錯問題
- vue具名插槽slot
- springboot配置maven的profiles(配置微服務多環境切換打包)
- resources 配置文件讀取順序
- Windows的cmd部署jar注意事項
- Java基礎
- JUC(鎖-并發-線程池)
- CAS
- Java 鎖簡介
- synchronized和Logk有什么區別?用新的ock有什么好處
- synchronized鎖介紹
- CompletableFuture
- 多線程
- 線程池
- 集合類
- map見過的小問題
- 退出雙層循環
- StringBuilder和StringBuffer核心區別
- 日志打印
- 打印log日志
- log日志文件生成配置
- 日期時間
- 時間戳轉為時間
- 并發工具
- 連接池
- http調用
- 內網訪問天地圖
- 判等問題
- 數值計算
- null問題
- 異常處理
- 文件IO
- 序列化
- 內存溢出OOM
- Double轉String出現E的問題
- springboot接收前端表單提交多字段和上傳文件
- 子線程的錯誤, 全局異常處理捕獲不到
- vue同一個項目訪問多個不同ip地址接口
- Autowired注解導入為null
- shiro
- UnavailableSecurityManagerException錯誤
- Windows服務器80端口被占用
- java圖片增加水印
- springcloud
- Feign方法配置錯誤導致jar包啟動失敗
- feign調用超時
- Springcloud從Nacos的yml文件讀取出錯
- 定時任務quartz
- JavaPOI導出Excel
- 合并行和列
- 設置樣式
- 設置背景色
- docker
- Linux 安裝
- docker命令
- docker網絡
- docker數據卷
- dockerfile
- docker安裝ping命令
- docker-compose
- docker-compose文件內容介紹
- Linux關閉docker開機啟動
- jar打包為鏡像
- 遷移docker容器存儲位置
- Nginx
- Linux在線安裝Nginx
- nginx.conf 核心配置文件
- vue 和 nginx 刷新頁面會報404
- nginx 轉發給三個集群的tomcat
- ServerName匹配規則
- Nginx負載均衡策略
- location 匹配規則
- Nginx 搭建前端調用后臺接口的集群
- alias與root
- nginx 攔截 post 請求, 帶參數轉發到前端頁面
- 防盜鏈配置
- Nginx的緩存
- 通用Nginx配置
- nginx配置文件服務器
- 后臺jar包得不到正確ip,nginx代理時要處理
- 升級使用websocket協議
- 設置IP黑/白名單
- vue項目get請求Nginx返回html頁面post返回405錯誤
- Nginx限制所有接口流量
- Redis
- 緩存數據一致性
- 內存淘汰策略
- Redis數據類型
- gmt6
- Linux安裝GMT6
- GMT6配置中文
- GMT文件修改Windows版本到Linux版本
- 注意GMT不同字體導致符號不同的問題
- GMT繪制南海諸島小圖
- GMT生成中文圖例
- elasticsearch
- 安裝配置
- Linux安裝配置elasticsearch7.6.2
- Linux 安裝 kibana 7.6.2
- 安裝7.6.2中文分詞器
- docker 安裝elasticsearch7.6.2
- 安裝Logback7.6.2
- springboot使用
- 0. elasticsearch賬號密碼模式訪問
- 1. 配置連接
- 2. 索引
- 3. 批量保存更新
- Result window is too large 10000
- elasticsearch 分詞的字段做排序 fielddata, 設置fielddata=true 無效果
- elasticsearch 完全匹配查詢(精確查詢)
- 模糊搜索
- 日期區間查詢
- 6.x基礎知識
- 自定義詞庫
- elasticsearch集群
- 搜索推薦Suggester
- 查詢es保存的數組
- 億級mysql數據導入到es
- es 報錯 ORBIDDEN/12/index read-only
- es核心概念
- es的分布式架構原理
- 優化大數據量時的ES查詢性能
- canal
- 1. mysql的Binlog
- 2. Canal 的工作原理
- 3. canal同步es
- JVM
- 1 類的字節碼
- 2. 類的加載
- JVM知識點
- Maven
- 依賴沖突
- xxl-job
- docker 安裝配置 xxl-job
- idea
- springboot啟動報錯命令過長
- services統一啟動微服務各模塊
- 云服務器安裝寶塔面板
- 突然出現啟動或者運行特別慢
- 有導入依賴但是顯示紅色同時點擊進去也有依賴
- Linux
- sh文件執行報錯: command not found
- 使用vagrant安裝虛擬機
- Linux 開啟端口
- 開放端口
- 復制文件夾及其文件到另一個文件夾
- 兩個服務器之間映射端口
- TCP協議
- 分層模型
- TCP概述
- 支撐 TCP 協議的基石 —— 首部字段
- 數據包大小對網絡的影響 —— MTU 與 MSS 的奧秘
- 端口號
- 三次握手
- TCP 自連接
- 四次揮手
- TCP 頭部時間戳
- 分布式
- 分布式腦裂問題
- 分布式事務
- 基礎知識
- 實現分布式事務的方案
- 阿里分布式事務中間件seata
- 冪等性問題
- 其他工具
- webstorm git提交代碼后project目錄樹不顯示
- 消息隊列
- 如何保證消費的順序
- 數據結構
- 漫畫算法:小灰的算法之旅
- oracle