Elaticsearch學習

Elaticsearch

索引

1、索引創建

PUT /index_v1
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"aaa": {"type": "keyword","store": true},   "hhh": {"type": "keyword","store": true}}}
}

2、索引別名

person_info_v1為索引名稱,person_info為索引要創建的別名

put /person_info_v1/_alias/person_info

查詢語法

1、minimum_should_match

bool查詢也可以用 minimum_should_match, 如果配置成數字 3, 則表示 查詢關鍵詞被分詞器分成 3 個及其以下的term 時, they are all required(條件都需要滿足才能符合查詢要求)

對于被analyzer分解出來的每一個term都會構造成一個should的bool query的查詢,每個term變成一個term query子句。 例如"query": “how not to be”,被解析成: { “bool”: { “should”: [ { “term”: { “body”: “how”}}, { “term”: { “body”: “not”}}, { “term”: { “body”: “to”}}, { “term”: { “body”: “be”}} ],

2、查詢分詞效果

anlyzer后面是分詞器,有ik_smart,ik_max_word等,text后面是想要查看分詞效果的詞

POST _analyze
{"analyzer":"ik_max_word","text":"李四"}

3、must和should混合使用

must是數據庫中AND的意思,should是數據庫中OR的意思,使用的時候不能簡單的QueryBuilders.boolQuery.must().should(),要向下面這樣使用

QueryBuilders.boolQuery().must(QueryBuilders.termQuery("is_deleted", DELETE_FLAG)).must(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("person_name", keywordVal).operator(Operator.AND).analyzer("ik_max_word") ));

Operato.AND表示查詢分詞要和es中的索引都匹配上才行,比如索引中內容是張三三,分詞效果是三三,查詢內容是張三,分詞是,那這個時候就查詢不到結果,查詢內容改成張三三,分詞效果是三三,就和索引中的分詞都匹配上了,可以查詢出內容。這樣做的原因是防止你輸入張三的時候把李三也查出來。如果不顯示的聲明Operator.AND,那會默認使用Operator.OR,這樣的話輸入張三,就會把李三也查出來,因為張三分詞是,只要匹配了,就會查出來

4、查詢索引中數據大小

GET /my-index-000001/_stats

5、字段匹配度排序

比如有個person_name字段,正常查詢的時候按照_score排序,查詢張建的時候,張建建的分值比張建的分值大,導致排序的時候張建建排在張建之前,但是按照常理來說,張建應該排在張建建之前,這就涉及到es的分詞器以及分值計算問題了

解決方法是在person_name字段中設置一個子字段,不分詞

"person_name": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart","store": true,"index_options": "docs","fields": {"raw": { "type": "keyword", "store": true }}}

查詢的時候,使用match_parse精確查詢子字段并用boost設置較大的權重,使用match模糊查詢person_name字段

查詢語句

1、短語匹配
{"query": {"bool": {"should": [{"match_phrase": {"person_name.raw": {"query": "張建建","boost": 10}}},{"match": {"person_name": {"query": "張建建"}}}]}}
}

java代碼

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(QueryBuilders.matchPhraseQuery("person_name.raw",keywordVal).boost(4));
queryBuilder.should(QueryBuilders.matchQuery("person_name", keywordVal).operator(Operator.AND).analyzer("ik_max_word"));
2、查詢所有
/_search
{"query": {"match_all": {}}
}
3、查詢數量
/_count
{"query": {"match_all": {}}
}
4、排序
{"query": {"match": {"ent_name": "杭州乾元"}},"sort": [{"est_date": {"order": "asc"}}]
}
5、nested查詢
 {"query": {"bool": {"filter": [{"nested": {"query": {"bool": {"filter": [{"term": {"clues.clue_id": {"value": "xxx","boost": 1}}}],"boost": 1}},"path": "clues","score_mode": "none","boost": 1}}],"boost": 1}}
}
6、字段+nested
{"query": {"bool": {"filter": [{"terms": {"_id": ["xxx"],"boost": 1}},{"nested": {"query": {"bool": {"filter": [{"terms": {"clues.clue_code": ["xxx"],"boost": 1}}],"adjust_pure_negative": true,"boost": 1}},"path": "clues","ignore_unmapped": false,"score_mode": "none","boost": 1}}],"adjust_pure_negative": true,"boost": 1}}
}
7、nested字段為空條件查詢
{"query": {"bool": {"must_not": [{"nested": {"path": "tags","query": {"exists": {"field": "tags"}}}}]}}
}
8、案件數據為空,但是線索不為空的數據
{"query": {"bool": {"filter": [{"bool": {"should": [{"bool": {"must_not": [{"exists": {"field": "case_type"}}],"adjust_pure_negative": true,"boost": 1}}],"adjust_pure_negative": true,"boost": 1}},{"range": {"clue_num": {"from": "0","to": null,"include_lower": false,"include_upper": true,"boost": 1}}}]}}
}

刪除

刪除索引中的全部數據

POST /my_index/_delete_by_query
{"query": {"match_all": {}}
}

命令行刪除:

curl -u elastic:'xxxx' -XPOST 'ip:port/medical_institution/_delete_by_query?refresh&slices=5&pretty' -H 'Content-Type: application/json' -d'{  "query": {    "match_all": {}  }}'

插入

POST /person_info_test_v1/_doc/
{"person_name": "張建芬"
}

更新

1、數據更新

(1)nested更新
POST  http://ip:port/case_info/_update_by_query
{"script": {"source": "ctx._source.clues[0].clue_state = 2","lang": "painless"},"query": {"bool": {"filter": [{"nested": {"query": {"bool": {"filter": [{"term": {"clues.clue_id": {"value": "xxx","boost": 1}}}],"boost": 1}},"path": "clues","score_mode": "none","boost": 1}}],"boost": 1}}
}
(2)nested字段置空
{"script": {"source": "ctx._source.clues = []","lang": "painless"},"query": {"term": {"_id": "xxx"}}
}
(3)多條件更新
POST  http://ip:port/case_info/_update_by_query
{"script": {"source": "ctx._source.obj_code = 'xxx'","lang": "painless"},"query": {"bool": {"filter": [{"term": {"case_type": "check_action"}},{"term": {"obj_code": "xxx"}}]}}
}
(4)數組(nested)字段更新
#更新為空的字段
{"script": {"source": "def tags= ctx._source.tags;def newTag=params.tagInfo; if (tags == null) {  ctx._source.tags = params.tagInfo;}","lang": "painless","params": {"tagInfo": [{"tag_code": "case_xzcf_basic_0001","tag_value": "簡易程序"},{"tag_code": "case_xzcf_basic_0002","tag_value": "立案階段"},{"tag_code": "case_xzcf_basic_0003","tag_value": "無文書"}]}},"query": {"term": {"_id": "0e978d6afb74b52a322d7aa8fbfbddf8"}}
}
#將不為空的字段置為空
{"script": {"source": "def tags= ctx._source.tags;def newTag=params.tagInfo;  ctx._source.tags = params.tagInfo;","lang": "painless","params": {"tagInfo": []}},"query": {"bool": {"must": [{"nested": {"path": "tags","query": {"exists": {"field": "tags"}}}}]}}
}

2、更新配置參數

PUT http://ip:port/case_info/_settings
{"refresh_interval": "1s"
}

訪問

1、在linux中加密訪問

#elastic是用戶名,xxx是密碼
curl ip:port -u elastic:'xxx'

2、ES健康狀態查看

curl http://localhost:9200/_cat/health?v -u elastic:'xxx'

ES問題處理

一、數據插入失敗

1、提示只讀

] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [person_info_v1] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})

解決方法:首先查看磁盤空間是否被占滿了,如果磁盤空間夠用,則執行以下語句,將索引只讀狀態置為false

/indexname/_settings    PUT
{"index": {"blocks": {"read_only_allow_delete": "false"}}
}{"index": {"refresh_interval": "1s"}
}

2、cpu占用過高

在網頁上輸入以下地址

http://ip:port/_nodes/hotthreads

問題處理

一、數據插入失敗

1、提示只讀

] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [person_info_v1] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})

解決方法:首先查看磁盤空間是否被占滿了,如果磁盤空間夠用,則執行以下語句,將索引只讀狀態置為false

/indexname/_settings    PUT
{"index": {"blocks": {"read_only_allow_delete": "false"}}
}{"index": {"refresh_interval": "1s"}
}

2、cpu占用過高

在網頁上輸入以下地址

http://ip:port/_nodes/hotthreads

查詢出的內容搜索cpu usage by thread即可

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

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

相關文章

匯編-CALL和RET指令

CALL指令調用一個過程, 使處理器從新的內存位置開始執行。過程使用RET(從過程返回) 指令將處理器轉回到該過程被調用的程序點上。 CALL指令的動作: 1.將CALL指令的下一條指令地址壓棧(作為子過程返回的地址) 2.將被調過程的地址復制到指令指針寄存器E…

搜維爾科技:Faceware面部捕捉最佳實踐!

視頻源和分辨率: 我們的軟件針對 RGB 彩色素材進行了優化,不支持使用紅外攝像機。 我們建議視頻分辨率為 720p 和 1080p。低于 720p 的分辨率可能會對跟蹤質量產生負面影響,而高于 1080p 的分辨率會導致存儲要求和傳輸時間增加,而…

python——第十三天

uuid 是通用唯一識別碼(Universally Unique identifier)的縮寫 UUID是一個128比特的數值 uuid模塊: 獲取一個128位(比特)的永不重復的數字,當然我們使用的時候會轉換為32個的字符串 impor uuud uui…

【Java 進階篇】Jedis:讓Java與Redis輕松對話的利器

在現代軟件開發中,緩存系統是提高系統性能的常見手段之一,而Redis作為一個高性能的緩存數據庫,被廣泛應用于各類系統。如果你是Java開發者,那么使用Jedis庫可以讓你輕松地與Redis進行交互。本文將帶你深入了解Jedis的快速入門&…

c語言-冒泡排序

冒泡排序原理: 冒泡排序是一種簡單直觀的排序算法,它重復地遍歷待排序的元素序列,比較相鄰的兩個元素,如果它們的順序不符合要求(例如升序要求前面的元素小于后面的元素),則交換它們的位置。遍歷…

國家開放大學平時作業 練習題

試卷代號:1377 理工英語3 參考試題 一、交際用語(共計10分,每小題2分) 1-5題:選擇正確的語句完成下列對話,并將答案序號寫在答題紙上。 1.-1 won the first prize in todays speech contest. - …

R語言——圖解taxize,強烈推薦收藏關注,持續更新中

圖解taxize 1. taxize分解思路1.1 圖解說明 2. 針對不同數據庫的函數組2.1 APGⅢ2.2 BOLD(barcode of life data system) 1. taxize分解思路 taxize可以幫助人們從許多數據庫中獲取信息。 由于要處理的數據庫很多,導致taxize包含的功能函數…

基本鎖介紹

鎖 1、分類 樂觀鎖:在select的時候不會加鎖,是基于程序實現的,所以不會存在死鎖的情況。適用于讀多寫少的場景(寫的并發量相對不高),可以提高系統的吞吐量。因為如果寫多的話,樂觀鎖會有很大機率更新失敗…

可持續創新 精選路線

在加速企業數字化轉型、 實現智能制造的升級之路上! 使用好的工具固然重要, 而有好工具,也要會用工具。生信科技不僅為企業提供強大的產品支持, 更有全方位的定制化服務, 提升工程師的工具應用能力, 讓企業…

C++ Qt QFile用法介紹與代碼演示

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 打開和關閉文件讀取文件寫入文件示例代碼自定義格式文件解析在Qt 中 QFile 的類用于讀寫本地文件系統中的文件。它繼承自 QIODevice,所以它包含了許多用于數據輸入和輸出的功…

c++ 課程筆記

105課: cpp文件分為 .h .cpp .cpp 文件 110課:124課 深拷貝 淺拷貝 自建拷貝構造解決淺拷貝釋放new后堆區析構函數的問題 (淺拷貝 拷貝內存地址, 釋放堆區時 導致源數據 釋放時,該地址無數據?而報錯) 淺拷貝: 拷貝了對方的值和 堆區內存地址(刪除 影響原數據堆區) 深拷貝…

第二類曲線積分@對坐標的曲線積分

文章目錄 abstract對坐標的曲線積分變力沿曲線所做的功平均功(恒力做功)變力做工弧段微分第二類曲線積分的定義函數在曲線弧上連續推廣:空間曲線弧的第二類曲線積分常用形式和簡寫利用第二類曲線積分表示變力做功性質 計算方法證明對坐標 x x x對坐標 y y y相加積分限和曲線弧起…

文件批量重命名技巧:圖片文件名太長怎么辦?告別手動改名方法

在日常生活中,常常會遇到文件名過長導致的問題。尤其是在處理大量圖片文件時,過長的文件名可能會使得文件管理變得混亂不堪。現在來看下云炫文件管理器如何批量重命名,讓圖片文件名變得更簡潔,提高工作效率。 操作1、在云炫文件…

python運算符重載之字符串顯示和右側加法

1 python運算符重載之字符串顯示和右側加法 1.1 重載字符串顯示 1.1.1 str和repr python調用prin()t時,自動調用__str__和__repr__, python調用str()時,自動調用__str__和__repr__, python調用repr()時,自動調用_…

深入理解C語言指針基礎概念:定義、內存地址與聲明初始化

導言: 在C語言中,指針是一項強大而重要的概念,直接涉及內存的底層操作。理解指針的基礎概念對于熟練運用C語言以及理解底層系統工作原理至關重要。本文將深入研究指針的定義、內存地址的概念以及指針的聲明和初始化,幫助讀者建立對…

C++之unordered_map/set的使用

前面我們已經學習了STL中底層為紅黑樹結構的一系列關聯式容器——set/multiset 和 map/multimap(C98). unordered系列關聯式容器 在C98中, STL提供了底層為紅黑樹結構的一系列關聯式容器, 在查詢時效率可達到log2N,即最差情況下需要比較紅黑樹的高度次, 當樹中的節點非常多時,…

3 動態規劃解解碼問題

來源:LeetCode第91題 難度:中等 描述:一條包含字母A-Z的消息通過以下映射進行了編碼: A->1,B->2,z->26,要接嗎已編碼的消息,所有數字必須基于上述映射的方法,反向映射回字母(可能由多種方法),例…

MindStudio學習一 整體介紹

一場景介紹 二 安裝介紹 1.LINUX 采用無昇騰硬件采用linux 分部署 2.WINDOWS 3.linux下安裝整體步驟 3.1安裝依賴 3.2 安裝步驟 1.gcc cmake 等依賴 2.python3.7.5 3.pip 安裝依賴 4.安裝JDK 5.安裝 Ascend-cann-toolkit 6.解壓安裝Mindstudio 7.進入bin路徑 ./…

MySQL where 子句

文章目錄 前言MySQL where 子句語法 從命令提示符中讀取數據使用PHP腳本讀取數據后言 前言 hello world歡迎來到前端的新世界 😜當前文章系列專欄:Mysql 🐱?👓博主在前端領域還有很多知識和技術需要掌握,正在不斷努力…

Javascript的form表單校驗輸入框

以下是HTML代碼&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…