天天看點

Elasticsearch7.3.2學習筆記

如何管理索引的生命周期?

答:

方法一:

  1. 建立policy
  2. 建立template & 關聯policy (

    "index.lifecycle.name": "datastream_policy"

    )
  3. 建立索引—走模闆—應用政策

方法二:

  1. 索引已經存在,模闆已經存在
  2. 修改模闆關聯policy
  3. 通過模闆建立的新索引将應用該policy

方法三:

  1. 索引已經存在
  2. 直接對索引加policy,立即生效

    這時,policy的各個phase的min_age都會被比較,然後哪個比對上了,就執行哪些action

PUT mylogs-pre-ilm*/_settings 
{
  "index": {
    "lifecycle": {
      "name": "mylogs_policy_existing"
    }
  }
}
           
如何關聯ILM policy到具體的索引?

答:

一、可以關聯到模闆,在rollover使用該模闆建立新的索引時,應用該policy,

二、在單獨建立索引時,在settings中進行配置

1:建立模闆

PUT _template/datastream_template
{
  "index_patterns": [“datastream-demo*"],                 
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": “xxxx",      
    "index.lifecycle.rollover_alias": “datastream-demo”,
  }
}
           

##比對全部的datastream-*的索引

2:這個時候不要配置滾動政策,隻針對目前索引就行了,因為滾動後産生的索引不會繼承這個lifecycle的屬性

PUT test-index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "my_policy"
  }
}
           

——————————————————————————————

ES Policy的phases & actions

1.index的phases都有哪幾種?

答:

四種,hot(一直被寫入的),warm(隻讀的),cold(不寫入了,查詢也很慢了),delete(不再需要可以删除的)

  1. hot:The index is actively being written to
  2. warm:The index is generally not being written to, but is still queried
  3. cold:The index is no longer being updated and is seldom queried. The information still needs to be searchable, but it’s okay if those queries are slower.
  4. delete:The index is no longer needed and can safely be deleted
2.Policy的參數

min_age: 從索引建立到現在經過的時間,如果發生了滾動,那就是從滾動到現在的時間

(時間檢查的配置:indices.lifecycle.poll_interval=0預設,時間機關:

d-Days,h-Hours,m-Minutes,s-Seconds,ms-Milliseconds,micros-Microseconds,nanos-Nanoseconds)

actions:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/_actions.html

——————————————————————————————

Metricbeat采集資料,采用自定義的Template,并配置日期、大小滾動和自動删除;都需要哪些流程和配置

答:

如果開啟了Security,那麼就需要先為Metric建立對應的賬号,并且增加對應的權限( manage_ilm等)詳細參考ndex lifecycle management API,在elasticsearch7.0之後都是用内置的ilm(index lifecycle management)來管理這項功能的。

step1:授權(一般有固定的采集賬号,built-in user)

step2:開啟配置

setup.ilm.enabled: auto

#滾動的别名

setup.ilm.rollover_alias: "metricbeat-demo"

#滾動的字尾

setup.ilm.pattern:"{now/d}-000001"

#最終的别名=

setup.ilm.rollover_alias+setup.ilm.pattern

setup.template.enabled: true

#模闆名稱(如果ilm配置的Indexname沒能比對模闆,那麼将不走目前配置的模闆)

setup.template.name: "metricbeat-physical-machine"

#比對模型

setup.template.pattern: "metricbeat-physical-machine*"

#模闆字段配置

#setup.template.fields: "fields.yml"
setup.template.overwrite: true
           

#索引的分片和壓縮

setup.template.settings:
  index.number_of_shards: 3
  index.codec: best_compression
output.elasticsearch:
  #hosts: ["172.16.22.158:9200", "172.16.22.159:9200", "172.16.22.160:9200"]
  hosts: ["localhost:9200"]
  index: "metricbeat-%{[agent.version]}-physical-machine-%{+yyyy.MM.dd}"
           

——————————————————————————————

1.如何調整單個索引中的最大字段數?

答:

在建立模闆時增加配置:

"mapping.total_fields.limit" : 5000
"settings" : {
      "index" : {
        "codec" : "best_compression",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "mapping.total_fields.limit" : 5000
      }
   },
           

2.如果一個已經建立好的索引,如何修改其最大字段數?

put http://host:port/_indexName/_settings
{
 {"index.mapping.total_fields.limit":2000}
}
           

——————————————————————————————

一、模闆

  1. 如何建立模闆?建立模闆的注意事項?
  2. 如何檢視已有模闆?
  3. 如何檢視指定模闆的詳細資訊?
  4. 如何修改模闆?
  5. 如何删除模闆?

    DELETE /_template/

  6. 一個建立索引命中多個模闆時是如何應用的?

    答:先比對order小的,再比對order大的,後者會向前覆寫,最終看settings & mappings,會覆寫之前的

  7. 什麼是dynamic template,有什麼特性?

    答:

二、索引與文檔

  1. 如何建立索引?
put demo_index
{
    "mappings" : {
        "properties" : {
            "my_text": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
               }
             },
             "name": {
               "type":"text"
             }
         }
    }
}
           
  1. 如何檢視已有索引?
get /_cat/indices
get /my_index
           
  1. 如何檢視索引屬性?
  2. 如何修改索引?
  3. 為索引添加别名

    PUT /Index/_alias/alias1

  4. 删除别名

    DELETE /<index>/_alias/<alias>

  5. clone Index

    POST /my_source_index/_clone/my_target_index

  6. 關閉索引

    POST /<index>/_close

  7. 重新整理索引tranlog中的資料
POST /<index>/flush
GET  /<index>/flush
           
  1. 什麼是正排索引和反向索引?
  2. 反向索引的核心組成?

    ①單詞詞典:記錄所有文檔的單詞——記錄單詞到反向索引的關系,用B+ Tree或者HASH拉鍊法實作,滿足高性能的插入和查詢

    ②倒排清單:記錄了單詞對應的文檔集合,由反向索引項組成——文檔ID + 詞頻TF + 位置Position + 偏移Offset

    補充:詞頻:用于相關性評分,

    位置:用于語句搜尋Phrase query;

    偏移:用于高亮

1.如何添加文檔?

①PUT my_index/_create/【如果文檔存在,建立失敗】,可以主動指定 或者 ES自動生成ID

②PUT my_index/_doc/1?op_type=create 【同上】

③PUT my_index/_doc/ 【如果文檔存在,則先删除,再索引進去,同時Version +1】

2. 如何添加比預期Mapping結構更加複雜的文檔?
3. 如何修改文檔?

POST /my_index/_update/

【不會删除原來的文檔,實作真正更新】

4. 如何删除文檔?
5. 如何批量操作(Index,Create,del,update)?
POST _bulk 
{
}
           

6.如何批量讀取?

GET _mget {}

7.如何批量查詢?

GET my_index/_msearch{}

三、分詞器

  1. Elasticsearch内置的分詞器有哪些,都是什麼作用?
  2. 如何對分詞器進行測試?

    ①對分詞器進行效果測試:

Get /analyze
{
“"
}
           

②對索引中的某個字段進行測試

③細緻定義tokenizer & filter

  1. Analyzer的組成?

    答:character Filters、tokenizer、Token Filters、

  2. 中文分詞器?

四、搜尋

1.查詢方式有幾種?

①URI

q=指定查詢語句

df=預設字段,不指定時對全部字段進行查詢

sort=排序

from/size=分頁

profile=檢視查詢是如何被執行的(”profile”:true)

範圍查詢

通配符查詢

正則查詢

模糊查詢

近似比對查詢

②request body

③CURL

2.precision & recall 的含義?

答:

precision:被召回的正确相關結果/全部的傳回結果(正确相關結果+不相關的結果),即被召回的正确率

recall:被召回的正确相關結果/正确的相關結果(正确相關結果+未被召回的相關結果),

3.term query 和 phrase query和Boolean query 差別?

①"phrase query”:(

PhraseQuery

)要把查詢的内容用”“圈起來,表示要被查詢的内容同時出現,并且順序一緻,and的關系

②term query:(

DisjunctionQuery

)不需要””,詞組之間各個詞是or的關系,出現一個即可

③(boolean query):(

BooleanQuery

)需要把查詢内容用()圈起來,表示分組的概念,即包含了boolean 或者包含了query的

五、Mapping

1.Mapping的類型:Dynamic Mapping &

2.Mapping的字段類型能否修改?

答:

不能,除非Reindex,如果是新增的字段,并且dynamic設定為true時,無影響,切Mapping會被更新

3.如何建立Mapping?

PUT my_index
{
"mappings":{}
}
           

4.常用的Mapping Parameters?

5.什麼是多字段類型?

五、運維

1.如何配置冷熱節點?

2.資料節點的記憶體和存儲配置?

3.如何配置Master、data、coordinate、Machine learning節點類型?

4.如何自定義配置character Filters、tokenizer、Token Filters?各個階段都做了哪些操作?

答:

在建立索引的時候,在settings中進行配置,待查文檔

5.讀寫分離如何配置?

四、分片

1.如何修改主分片數?

答:

預設主分片數是在建立索引時設定的,且不允許修改,如果需要修改,則隻能ReIndex。

2.分片數的設定原則?

3.叢集狀态與分片的關系?

答:

Green:主分片與副本分片都正常分片 ;

Yellow:主分片正常配置設定,有副本分片未能正常配置設定;

Red:有主分片未能配置設定;

六、安全

1.使用者管理——建立/更新使用者

POST /_security/user/<username>
PUT /_security/user/<username>
POST /_security/user/jacknich
{
  "password" : "[email protected]",
  "roles" : [ "admin", "other_role1" ],
  "full_name" : "Jack Nicholson",
  "email" : "[email protected]",
  "metadata" : {
    "intelligence" : 7
  }
}
           

2.修改密碼

POST /_security/user/_password
POST /_security/user/<username>/_password
POST /_security/user/jacknich/_password
{
  "password" : “s3cr3t"
}
           

3.删除使用者

DELETE /_security/user/<username>
DELETE /_security/user/jacknich
           

4.禁用使用者

PUT /_security/user/<username>/_disable
PUT /_security/user/jacknich/_disable
           

5.啟用使用者

PUT /_security/user/<username>/_enable
PUT /_security/user/jacknich/_enable
           

6.檢視使用者

GET /_security/user
GET /_security/user/<username>
GET /_security/user/jacknich
           

7.啟用使用者

PUT /_security/user/<username>/_enable
PUT /_security/user/jacknich/_enable
           
角色:

1.建立角色

POST /_security/role/<name>
PUT /_security/role/<name>
POST /_security/role/my_admin_role
{
  "cluster": ["all"],
  "indices": [
    {
      "names": [ "index1", "index2" ],
      "privileges": ["all"],
      "field_security" : { // optional
        "grant" : [ "title", "body" ]
      },
      "query": "{\"match\": {\"title\": \"foo\"}}" // optional
    }
  ],
  "applications": [
    {
      "application": "myapp",
      "privileges": [ "admin", "read" ],
      "resources": [ "*" ]
    }
  ],
  "run_as": [ "other_user" ], // optional
  "metadata" : { // optional
    "version" : 1
  }
}
           

2.删除role

DELETE /_security/role/<name>
DELETE /_security/role/my_admin_role
1.Creates and updates role mappings.(must have at least the manage_security cluster privilege)
POST /_security/role_mapping/<name>
PUT /_security/role_mapping/<name>
assigns the “user” roles to all users.
POST /_security/role_mapping/mapping1
{
  "roles": [ "user"],
  "enabled": true, 
  "rules": {
    "field" : { "username" : "*" }
  },
  "metadata" : { 
    "version" : 1
  }
}
2.Retrieves role mappings.
GET /_security/role_mapping
GET /_security/role_mapping/<name>
GET /_security/role_mapping/mapping1
{
  "mapping1": {
    "enabled": true,
    "roles": [
      "user"
    ],
    "rules": {
      "field": {
        "username": "*"
      }
    },
    "metadata": {}
  }
}
           

3.Removes role mappings.

DELETE /_security/role_mapping/<name>
DELETE /_security/role_mapping/mapping1
4.Evicts roles from the native role cache.
POST /_security/role/<name>/_clear_cache
           

5.Evicts users from the user cache:(移除使用者緩存)

使用者的憑據會緩存到每個節點的記憶體上,避免每次請求都去一個遠端服務或者去磁盤上查找

POST /_security/realm/<realms>/_clear_cache
POST /_security/realm/<realms>/_clear_cache?usernames=<usernames>
           

5.1修改使用者角色

6.如何使用api_key?

考試:

  1. 寫入的資料是如何變成elasticsearch裡可以被檢索和聚合的索引内容的?
  2. lucene如何實作準實時索引?
  3. 什麼是segment?
  4. 什麼是commit?
  5. segment的資料來自哪裡?
  6. segment在寫入磁盤前就可以被檢索,是因為利用了什麼?
  7. elasticsearch中的refresh操作是什麼?配置項是哪個?設定的指令是什麼?
  8. refresh隻是寫到了檔案系統緩存,那麼實際寫入磁盤是由什麼控制呢?如果這期間發生錯誤和故障,資料會不會丢失?
  9. 什麼是translog日志?什麼時候會被清空?什麼是flush操作?配置項是什麼?怎麼配置?
  10. 什麼是段合并?為什麼要段合并?段合并線程配置項?段合并政策?怎麼forcemerge(optimize)?
  11. routing的規則是什麼樣的?replica讀寫過程?wait_for_active_shards參數timeout參數 ?
  12. reroute 接口?
  13. 兩種 自動發現方式?
  14. refresh和flush的差別是什麼?