核心概念
索引
概念:
這里可以類比與 MySQL 中的表,但是不同于表
在 es 中索引有三層含義
- 表示源文件數(shù)據(jù):通常說集群中有 user 索引,即表示集群服務中存在 user 這樣一張“表”
- 表示索引文件:以加速查詢檢索為目的而設計和創(chuàng)建的數(shù)據(jù)文件,通常承載于某些特定的數(shù)據(jù)結構,如哈希、FST 等。例如:通常所說的 正排索引 和 倒排索引(也叫正向索引和反向索引)。就是當前這個表述,索引文件和源數(shù)據(jù)是完全獨立的,索引文件存在的目的僅僅是為了加快數(shù)據(jù)的檢索,不會對源數(shù)據(jù)造成任何影響
- 表示創(chuàng)建數(shù)據(jù)的動作:通常說創(chuàng)建或添加一條數(shù)據(jù),在 ES 的表述為索引一條數(shù)據(jù)或索引一條文檔,或者 index 一個 doc 進去。此時索引一條文檔的含義為向索引中添加數(shù)據(jù)。
組成:
aliases:
索引別名,
es 中索引一旦創(chuàng)建,不允許修改結構,但是可以新建一個索引,然后將原索引數(shù)據(jù)遷移到新索引,再對新索引起別名,間接實現(xiàn)修改索引的目的
mappings:
映射關系,定義了索引中包含哪些字段,以及字段的類型、長度、分詞器等
如下:
home、name、salary 表示字段名,類似與 MySQL 中的表字段
type:表示類型,
其中的常見的比如:
- text:文本【數(shù)據(jù)保存后會自動對該字段的值進行分詞】
- keyword:表示不對該字段進行分詞,全值保存,比如姓名
- long:表示數(shù)字
- float:小數(shù)
- ...
analyzer:表示指定的分詞器
{
"es_db" : {
"aliases" : { },
"mappings" : {
"properties" : {
"home" : {
"type" : "text"
},
"name" : {
"type" : "keyword"
},
"salary" : {
"type" : "float"
},
"gender": {
"type": "text",
"analyzer": "standard"
}
}
},
"settings" : {}
}
}
mappings 中常見的類型如下:
參數(shù)名稱 |
釋義 |
analyzer |
指定分析器,只有 text 類型字段支持。 |
copy_to |
該參數(shù)允許將多個字段的值復制到組字段中,然后可以將其作為單個字段進行查詢 |
dynamic |
控制是否可以動態(tài)添加新字段,支持以下四個選項: true:(默認)允許動態(tài)映射 false:忽略新字段。這些字段不會被索引或搜索,但仍會出現(xiàn)在_source返回的命中字段中。這些字段不會添加到映射中,必須顯式添加新字段。 runtime:新字段作為運行時字段添加到索引中,這些字段沒有索引,是_source在查詢時加載的。 strict:如果檢測到新字段,則會拋出異常并拒絕文檔。必須將新字段顯式添加到映射中。 |
doc_values |
為了提升排序和聚合效率,默認true,如果確定不需要對字段進行排序或聚合,也不需要通過腳本訪問字段值,則可以禁用doc值以節(jié)省磁盤空間(不支持 text 和 annotated_text) |
eager_global_ordinals |
用于聚合的字段上,優(yōu)化聚合性能。 |
enabled |
是否創(chuàng)建倒排索引,可以對字段操作,也可以對索引操作,如果不創(chuàng)建索引,任然可以檢索并在_source元數(shù)據(jù)中展示,謹慎使用,該狀態(tài)無法修改。 |
fielddata |
查詢時內(nèi)存數(shù)據(jù)結構,在首次用當前字段聚合、排序或者在腳本中使用時,需要字段為fielddata數(shù)據(jù)結構,并且創(chuàng)建倒排索引保存到堆中 |
fields |
給 field 創(chuàng)建多字段,用于不同目的(全文檢索或者聚合分析排序) |
format |
用于格式化代碼,如 |
index |
是否對創(chuàng)建對當前字段創(chuàng)建倒排索引,默認 true,如果不創(chuàng)建索引,該字段不會通過索引被搜索到,但是仍然會在 source 元數(shù)據(jù)中展示。 |
norms |
是否禁用評分(在filter和聚合字段上應該禁用) |
null_value |
為 null 值設置默認值 |
search_analyzer |
設置單獨的查詢時分析器 |
settings:
索引設置,常見設置如 分片和副本的數(shù)量等
文檔:Document
文檔是 ES 中的最小數(shù)據(jù)單元。它是一個具有結構化 JSON 格式的記錄。文檔可以被索引并進行搜索、更新和刪除操作。
文檔元數(shù)據(jù),所有字段均以下劃線開頭,為系統(tǒng)字段,用于標注文檔的相關信息:
- _index:文檔所屬的索引名
- _type:文檔所屬的類型名
- _id:文檔唯一 id
- _source: 文檔的原始 Json 數(shù)據(jù)
- _version: 文檔的版本號,修改刪除操作 _version 都會自增1
- _seq_no: 和 _version 一樣,一旦數(shù)據(jù)發(fā)生更改,數(shù)據(jù)也一直是累計的。Shard 級別嚴格遞增,保證后寫入的 Doc 的 _seq_no 大于先寫入的 Doc 的 _seq_no。
- _primary_term: _primary_term 主要是用來恢復數(shù)據(jù)時處理當多個文檔的 _seq_no 一樣時的沖突,避免 Primary Shard 上的寫入被覆蓋。每當 Primary Shard 發(fā)生重新分配時,比如重啟,Primary選舉等,_primary_term 會遞增1。
常用指令
es 中指令都是基于 restful 風格
創(chuàng)建索引
#put / + 索引名
PUT /db_1
# 也可以指定一些配置
PUT /db_2
{
"settings": {
"number_of_shards": "1",
"number_of_replicas": "1"
},
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"age" : {
"type" : "long"
},
"address" : {
"type" : "text"
}
}
}
}
查詢索引
#查看索引
GET /db_2
刪除索引
#刪除索引
DELETE /db_1
索引文檔
#索引文檔
PUT /db_2/_doc/1
{
"name":"張三",
"age":18,
"address":"和月努力學編程"
}
查詢文檔
有兩種方式:一種模糊查詢,一種精準查詢
模糊查詢
這里補充一個指令,查看文檔字段分詞效果
查看分詞結果
#查看分詞結果
#ik_max_word:會將文本做最細粒度的拆分
#analyzer:指定分詞器
POST _analyze
{
"analyzer":"ik_max_word",
"text":"和月努力學習編程"
}
精準查詢
#精準查詢
GET /db_2/_search
{
"query": {
"term": {
"name": "張三"
}
}
}
更新文檔
全文替換
可以看到更新成功,這里表示全文替換,并不是更新其中一個字段
#更新文檔 這種方式是全文替換,PUT 和 POST 效果是一樣的
PUT /db_2/_doc/1
{
"address":"和月努力學編程"
}
GET /db_2/_doc/1
部分更新
可以看到當前 age 是 18
執(zhí)行部分更新命令
再次查詢,可以看到只有 age 變化了
#部分更新
POST /db_2/_update/1
{
"doc": {
"age": 16
}
}
GET /db_2/_doc/1
刪除文檔
再次查詢已經(jīng)查不到 id 為 1 的文檔了,刪除成功
文章來源:http://www.zghlxwxcb.cn/news/detail-838142.html
#刪除文檔
DELETE /db_2/_doc/1
GET /db_2/_doc/1
感謝觀看?。?!本次先介紹這么多,感興趣的小伙伴可以關注留言,持續(xù)更新中文章來源地址http://www.zghlxwxcb.cn/news/detail-838142.html
到了這里,關于ElasticSearch 核心概念以及常用命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!