1、理解ElasticSearch各名詞含義
ElasticSearch對比Mysql
Mysql數(shù)據(jù)庫 | Elastic Search |
---|---|
Database | 7.X版本前有Type,對比數(shù)據(jù)庫中的表,新版取消了 |
Table | Index |
Row | Document |
Column | mapping |
Elasticsearch是使用Java開發(fā)的,8.1版本的ES需要JDK17及以上版本;es默認(rèn)帶有JDK,如果安裝es環(huán)境為java8,則會默認(rèn)使用自帶環(huán)境;
索引、文檔、映射
??? 索引index
??????? 跟我們常說的數(shù)據(jù)庫索引沒有任何關(guān)系,它其實相當(dāng)于數(shù)據(jù)庫里面存數(shù)據(jù)的表;
文檔document
??????? 對應(yīng)我們數(shù)據(jù)庫的數(shù)據(jù),即每行數(shù)據(jù);
映射mappding
??????? 對應(yīng)我們數(shù)據(jù)庫的字段,自己設(shè)置的話需要設(shè)置字段類型,不設(shè)置在插入文檔內(nèi)容的時候es會按照字段內(nèi)容設(shè)置字段類型;
分片、副本
??? 分片shards
??????? 數(shù)據(jù)量特大,沒有足夠大的硬盤空間來一次性存儲,且一次性搜索那么多的數(shù)據(jù),響應(yīng)跟不上,ES提供把數(shù)據(jù)進行分片存儲,這樣方便進行拓展和提高吞吐;
??? 副本replicas
??????? 分片的拷貝,當(dāng)主分片不可用的時候,副本就充當(dāng)主分片進行使用
??????? 索引分片的備份,shard和replica一般存儲在不同的節(jié)點上,用來提高高可靠性
ES默認(rèn)為一個索引創(chuàng)建1個主分片和1個副本,在創(chuàng)建索引的時候使用settings屬性指定,每個分片必須有零到多個副本
注意:索引一旦創(chuàng)建成功,主分片primary shard數(shù)量不可以變(只能重建索引),副本數(shù)量可以改變
?正排索引、倒排索引
-
正排索引 (Forward Index )
- 指將文檔的內(nèi)容按照文檔的順序進行索引,每個文檔對應(yīng)一個索引條目,包含了文檔的各個字段的內(nèi)容
- 正排索引的優(yōu)勢在于可以快速的查找某個文檔里包含哪些詞項。但是 正排不適用于查找包含某個詞項的文檔有哪些
倒排索引(Inverted Index)
-
根據(jù)關(guān)鍵詞構(gòu)建的索引結(jié)構(gòu),記錄了每個關(guān)鍵詞出現(xiàn)在哪些文檔或數(shù)據(jù)記錄中,適用于全文搜索和關(guān)鍵詞檢索的場景
-
它將文檔或數(shù)據(jù)記錄劃分成關(guān)鍵詞的集合,并記錄每個關(guān)鍵詞所出現(xiàn)的位置和相關(guān)聯(lián)的文檔或數(shù)據(jù)記錄的信息
2、默認(rèn)分詞及IK分詞區(qū)別演示
使用es自帶分詞器對內(nèi)容進行分詞
使用ik-smart進行分詞
使用ik_max_word進行分詞
分詞模式 | 特點 |
es默認(rèn)standard | 對中文按照一個一個字進行分詞 |
ik智能分詞ik_samrt | 按照中文詞組進行分詞,不會重復(fù)對單個文字進行分詞 |
ik最小顆粒分詞ik_max_word | 除了對詞組進行分詞外,還會對單個文字,及多詞組進行分詞 |
理解完分詞模式后,我們在插入文檔的時候是可以測試文檔默認(rèn)使用了哪種分詞;在我的測試結(jié)果中,集成IK的ES默認(rèn)使用的是ik_max_word;
3、索引及映射操作
索引常用接口:
接口名稱 | 請求方式 | 接口地址 | 請請求參數(shù) | 請求結(jié)果 |
---|---|---|---|---|
查看所有索引 | GET | /* | 索引列表,沒有數(shù)據(jù)返回{} | |
創(chuàng)建索引 | PUT | /index_name | { ? ? "settings": { ? ? ? ? "number_of_shards": 3, ? ? ? ? "number_of_replicas": 0 ? ? }, ? ? "mappings": { ? ? ? ? "properties": { ? ? ? ? ? ? "id": { ? ? ? ? ? ? ? ? "type": "keyword" ? ? ? ? ? ? }, ? ? ? ? ? ? "createTime": { ? ? ? ? ? ? ? ? "type": "date" ? ? ? ? ? ? }, ? ? ? ? ? ? "name": { ? ? ? ? ? ? ? ? "type": "text" ? ? ? ? ? ? } ? ? ? ? } ? ? } } |
請求成功返回 { ? ? "acknowledged": true, ? ? "shards_acknowledged": true, ? ? "index": "file" } |
是否存在 | HEAD | /index_name | 200索引存在 404索引不存在 |
|
獲取索引 | GET | /index_name | 索引信息 | |
更新索引設(shè)置 | PUT | /index_name | { ? "settings": { ??? "number_of_replicas": 2 ? } } |
|
刪除索引 | DELETE | /index_name | { ? ? "acknowledged": true } |
mapping無法后面進行單獨設(shè)置,或者插入文檔的時候es自動識別進行填入默認(rèn)類型;
4、文檔操作(“/_doc”代替之前版本type,固定寫法)
接口名稱 | 請求方式 | 接口地址 | 請請求參數(shù) | 請求結(jié)果 |
---|---|---|---|---|
查詢文檔 | GET | /index_name/_doc/1 | ||
新增文檔指定ID | PUT | /index_name/_doc/1 | { ? "id":5555, ? "name":"小滴課堂短鏈平臺", ? "createDate":"20240311" } |
|
新增文檔不指定ID | POST | /index_name/_doc | { ? "id":5555, ? "name":"小滴課堂短鏈平臺", ? "createDate":"20240311" } |
|
修改文檔 | PUT/POST | /index_name/_doc/1 | { ? "id":5555, ? "name":"小滴課堂", ? "createDate":"20240312" } |
|
刪除文檔 | DELETE | /index_name/_doc/1 |
文檔存儲文件的類型為JSON;文檔ID與我們參數(shù)的id不是同一個參數(shù),文檔ID類似于mysql設(shè)置了一個自增ID,我們在插入數(shù)據(jù)的時候可傳值,也可不傳值;
5、內(nèi)容搜索
搜索接口:GET /index_name/_search
請求參數(shù):name為我們自己的字段,這里可以根據(jù)自己字段進行調(diào)整
{
"query": {
"match": {
"name": "聽取"
}
}
}
返回字段解釋:
字段解釋
took字段表示該操作的耗時(單位為毫秒)。
timed_out字段表示是否超時。
hits字段表示搜到的記錄,數(shù)組形式。
total:返回記錄數(shù),本例是1條。
max_score:最高的匹配程度,本例是1.0
關(guān)于es類型較多,后續(xù)單獨出一篇文章進行記錄文章來源:http://www.zghlxwxcb.cn/news/detail-854204.html
6、參考文章
ElasticSearch8.X入門教程:ElasticSearch8.X入門教程_elasticsearch 8.x 學(xué)習(xí)-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-854204.html
到了這里,關(guān)于【搜索引擎2】實現(xiàn)API方式調(diào)用ElasticSearch8接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!