Arrays類的常用方法 代碼示例: public class ArrayDemo { public static void main(String[] args) { int[] a={1,2,57,8,1,58,4,51,5,45,15,1}; System.out.println(a); // ...
本文主要介紹 Elasticsearch REST API 的使用,相關的環境及軟體信息如下:CentOS 7.6.1810、Elasticsearch 8.2.2。
1、REST API 使用方法
curl -X <VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' ‐d '<BODY>'
說明:
參數 | 說明 |
<VERB> | 請求方法,如:GET,POST,PUT,HEAD 或 DELETE |
<PROTOCOL> | 協議,http 或 https |
<HOST> | 主機 |
<PORT> | Elasticsearch 服務埠,預設為9200 |
<PATH> | API 端點 |
<QUERY_STRING> | 請求參數 |
<BODY> | JSON 格式的請求體 |
2、Compact and aligned text (CAT) APIs
cat API 是提供給人在 Kibana 控制台或命令行中使用的,不適合應用程式調用。
2.1、查看集群健康狀況
curl -X GET "http://10.49.196.11:9200/_cat/health?v=true"
2.2、查看集節點信息
curl -X GET "http://10.49.196.11:9200/_cat/nodes?v=true"
3、Index APIs
3.1、創建索引
同時設置了 setting 和 mapping 信息;setting 裡面包含分片和副本信息,mapping 里包含欄位設置的詳細信息。
curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index' -d ' { "settings": { "index": { "number_of_shards": 2, "number_of_replicas": 1 } }, "mappings": { "properties": { "age": { "type": "integer" }, "name": { "type": "keyword" }, "poems": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" }, "about": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" }, "success": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" } } } }'
3.2、修改 _mapping 信息
欄位可以新增,已有的欄位只能修改欄位的 search_analyze r屬性。
curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index' -d ' { "properties": { "name": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" }, "age": { "type": "integer" }, "desc": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" } } }'
3.3、刪除索引
curl -X DELETE 'http://10.49.196.11:9200/poet-index'
3.4、查詢索引列表
curl -X GET "http://10.49.196.11:9200/*"
或
curl -X GET "http://10.49.196.11:9200/_all"
3.5、查詢索引詳情
curl -X GET 'http://10.49.196.11:9200/poet-index'
4、Document APIs
4.1、新增文檔
A、設置 id 為 1
curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_create/1' -d ' { "age": 30, "name": "李白", "poems": "靜夜思", "about": "字太白", "success": "創造了古代浪漫主義文學高峰、歌行體和七絕達到後人難及的高度" }'
B、不設置 id,將自動生成
curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_doc' -d ' { "age": 31, "name": "杜甫", "poems": "登高", "about": "字子美", "success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者" }'
C、批量新增文檔
curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_bulk' -d ' {"index":{"_id":"11"}} {"age": 30,"name": "杜甫11","poems": "登高","about": "字子美","success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者"} {"index":{"_id":"12"}} {"age": 30,"name": "杜甫12","poems": "登高","about": "字子美","success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者"} '
註:最後的空行是需要的,否則會報錯。
4.2、刪除文檔
curl -X DELETE 'http://10.49.196.11:9200/poet-index/_doc/1'
4.3、更新文檔
只更新參數設置的欄位。
curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_update/1' -d ' { "doc": { "age": 32, "poems": "望廬山瀑布" } }'
4.4、新增或覆蓋文檔
沒有對應 id 的文檔就創建,有就覆蓋更新所有的欄位(相當於先刪除再新增)。
curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_doc/1' -d ' { "age": 31, "name": "李白", "poems": "靜夜思", "about": "字太白" }'
5、Search APIs
5.1、查詢一個索引的所有文檔
curl -X GET 'http://10.49.196.11:9200/poet-index/_search'
5.2、根據 id 查詢文檔
curl -X GET 'http://10.49.196.11:9200/poet-index/_doc/1'
5.3、term 查詢
term 查詢不會對輸入的內容進行分詞處理,而是作為一個整體來查詢。
A、查詢單個詞
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "term": { "name": { "value": "李白" } } } }'
B、查詢多個詞
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "terms": { "name": ["李白", "杜甫"] } } }'
5.4、range 查詢
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "range": { "age": { "gte": 20, "lte": 35 } } } }'
5.5、全文查詢
5.5.1、match
對輸入的內容進行分詞處理,再根據分詞查詢。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "match": { "success": "理想主義" } }, "from": 0, "size": 10, "sort": [{ "name": { "order": "asc" } }] }'
5.5.2、multi_match
多欄位匹配。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "multi_match": { "query": "太白", "fields": ["about", "success"] } } }'
5.5.3、match_phrase
匹配整個查詢字元串。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "match_phrase": { "success": "文學作家" } } }'
5.5.4、match_all
查詢所有數據。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "match_all": { } } }'
5.5.5、query_string
query_string 可以同時實現前面幾種查詢方法。
A、類似 match
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "default_field": "success", "query": "古典文學" } } }'
B、類似 mulit_match
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "query": "古典文學", "fields": ["about", "success"] } } }'
C、類似 match_phrase
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "default_field": "success", "query": "\"古典文學\"" } } }'
D、帶運算符查詢,運算符兩邊的詞不再分詞
1、查詢同時包含 ”文學“ 和 ”偉大“ 的文檔
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "default_field": "success", "query": "文學 AND 偉大" } } }'
或
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "fields": ["success"], "query": "文學 偉大", "default_operator": "AND" } } }'
2、查詢 name 或 success 欄位包含"文學"和"偉大"這兩個單詞,或者包含"李白"這個單詞的文檔。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "query_string": { "query": "(文學 AND 偉大) OR 李白", "fields": ["name", "success"] } } }'
5.5.6、simple_query_string
類似 query_string,主要區別如下:
1、不支持AND OR NOT ,會當做字元處理;使用 + 代替 AND,| 代替OR,- 代替 NOT
2、會忽略錯誤的語法
查詢同時包含 ”文學“ 和 ”偉大“ 的文檔:
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "simple_query_string": { "fields": ["success"], "query": "文學 + 偉大" } } }'
5.6、模糊查詢
模糊查詢時使用的參數:
fuzziness |
允許的最大編輯距離,預設不開啟模糊查詢,相當於 fuzziness=0。支持的格式 1、可以是數字(0、1、2)代表固定的最大編輯距離 2、自動模式,AUTO:[low],[high] 查詢詞長度在 [0-low)範圍內編輯距離為 0(即強匹配) 查詢詞長度在 [low, high) 範圍內允許編輯 1 次 查詢詞長度 >high 允許編輯 2 次 |
prefix_length |
控制兩個字元串匹配的最小相同的首碼大小,也就是前 n 個字元不允許編輯,必須與查詢詞相同,預設是 0,大於 0 時可以顯著提升查詢性能 |
max_expansions |
產生的最大模糊選項 |
transpositions |
相鄰位置字元互換是否算作 1 次編輯距離,全文查詢不支持該參數 |
A、全文查詢時使用模糊參數
先分詞再計算模糊選項。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "match": { "success": { "query": "古典文化", "fuzziness": 1, "prefix_length": 0, "max_expansions": 5 } } } }'
B、使用 fuzzy query
對輸入不分詞,直接計算模糊選項。
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "fuzzy": { "success": { "value": "理想", "fuzziness": 1, "prefix_length": 0, "transpositions": true } } } }'
5.7、組合查詢
組合查詢使用 bool 來組合多個查詢條件。
條件 | 說明 |
must | 同時滿足 |
should | 滿足其中任意一個 |
must_not | 同時不滿足 |
filter | 過濾搜索,不計算得分 |
A、查詢 success 包含 “思想” 且 age 在 [20-40] 之間的文檔:
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "bool": { "must": [{ "simple_query_string": { "query": "思想", "fields": ["success"] } }, { "range": { "age": { "gte": 20, "lte": 40 } } }] } } }'
B、過濾出 success 包含 “思想” 且 age 在 [20-40] 之間的文檔,不計算得分:
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "query": { "bool": { "filter": [{ "simple_query_string": { "query": "思想", "fields": ["success"] } }, { "range": { "age": { "gte": 20, "lte": 40 } } }] } } }'
5.8、聚合查詢
A、求和
curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d ' { "aggs": {