一份远道而来的 Elastic 认证经验贴

铭毅天下

共 3091字,需浏览 7分钟

 ·

2020-08-25 06:12

介绍

大家好 我是dadaball 不好意思文筆不好,讓大家見笑了。

本身不是資訊出身的因緣際會下進入了資訊這個行業。

前年換跑道從只會oracle stored procedure 和寫一些 code 開始學習no sql ELK,

還記得剛開始接觸的版本是6.2.4 剛好是 xpack 獨立安裝的最後一個版本。

Elastic 认证一战经验教训

其實我只是一個小小資料庫工程師而已,專門協助客戶導入ELK 和一些問題排除。

還沒加入星球時,也是從網上的文章開始,這中間遇過版本不同踩過不少坑。

我自己的學習過程中看不懂的部分,例如 shared、segment、倒排索引, nestd、join 的用法或意義是什麼,會去找很多文章去看每個作者的解釋,一篇文章看不懂多看幾篇,

總會看到自己理解的說明,或者買書學習 ES。

去年10月份,公司希望我去考認證,趁著買一送一的優惠,把大綱練習完後就去考了。

碰到很多觀念似懂非懂,加上英文程度不好,當然不可能通過

Elastic 认证二战经验

在今年看完阮一鳴老師的課程,還有加入星球有很多資源可以使用,把我不熟的部分,通過視頻一一複習釐清,大家要好好珍惜銘毅天下大佬的用心。

接著考題的部分一定要動手多敲幾遍,腦袋中才會有印象,不奢求記得滾瓜爛熟,至少相關的關鍵字,語法要清楚,官方的文檔要好好的利用。

切記不要像我一樣挑個晚上11點的時間來考試,想說夜深人靜,結果搞到自己精神不濟,一個小時內只寫完兩題,還好精神有回來,剩15分鐘的時候才寫完。

有時間的話一定要檢查,我把cluster 2 task4的資料  輸入到cluster 1裡面,導致在cluster2 一直search 不出來,還好有發現趕快改回來。

真题拆解

以下是我考試真題的部分

1. 集群3個節點未啟動

讓ES啟動後,把 new_log index 的分片都移到  node1 old_log index             node2,node3

同時要確保集群是綠燈

  • node1 在 elasticsearch.yml       增加  node.attr.node_type: new
  • node2,node3 在 elasticsearch.yml 增加  node.attr.node_type: old

使用:

PUT new_log/_setting
{
    "settings": {
     "number_of_replicas": 0,
     "index.routing.allocation.include.node_type""new"
     }   
}

把 new_log 轉移到ˇnode1,

因為 new_log 有設副本,如果把分片都移到 node1 集群健康值不會是綠燈,所以要記得把副本設定為0

使用:

PUT old_log/_setting
{
    "settings": {
     "index.routing.allocation.include.node_type""old"
     }   
}

把 old_log 轉移到 node2,node3

2. 考自訂分詞器怎麼用

GET movie_data/_search
{
    "query": {
        "match" : {"title":"wean's"}
    }
}
   
GET movie_data/_search
{
    "query": {
        "match" : {"title":"weans"}
    }
}

把 movie_data reindex task2 用上面的DSL 語法查詢task2  讓查詢結果的分數是相同的

我是用whitespace 當作 tokenizer, 設定完分詞器後查詢出來的資料都是0筆, 後來發現rawdata 有大寫,filter 再加上 lowercase 就沒問題了

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type""custom",
          "char_filter": [
            "my_char_filter"
          ],
          "tokenizer""whitespace",
          "filter": ["my_filter"]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type""mapping",
          "mappings": [
            "' => "
          ]
        }
      },
      "filter": {
        "my_filter": {
          "type""lowercase"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type""text",
        "analyzer""my_custom_analyzer"
      }
    }
  }
}

3. 把 my_index index 增加一個新的字段

並且是  field1 + " " + field2 + " " + field3 + " " + field4

建立ingest
PUT _ingest/pipeline/pipeline_test
{
  "processors" : [
    {
      "script": {
      "lang""painless",
      "source""""
          ctx.new_field = ctx.field1 + "
 " + ctx.field2 + " " + ctx.field3 + " " + ctx.field4
      "
""
      }
    }
  }
  ]
}

最後用 用 update_by_query 把原本 my_index 的資料透過 pipeline 調整value

POST my_index/_update_by_query?pipeline=pipeline_test

4.  給了兩個手機的文檔

題目提供的 DSL 可以查詢的到這兩個文檔

但是這兩個文檔內容是沒有關係的,不應該兩筆都查詢的到

把這兩個文檔建立在 task4 的 index 裡,同時更改 nestd 模式,讓題目提供的DSL 語法查詢不到這兩筆文檔即可

其實說穿了就是 官網文檔 英文姓名 改成 手機資訊而已,只要熟悉文檔就可以了

https://www.elastic.co/guide/en/elasticsearch/reference/7.2/nested.html

5.  題目給了一個文檔

POST my_index/_doc/1
{
   "a""qwewrew",    <====忘記字段名稱跟值了
   "x_int" : 580
}

寫一個動態的template 讓x_ 開頭的字段是 integer 型態 剩下比對不到的欄位採用 keyword 型態

"mappings": {
 "dynamic_templates": [
   {
     "x_as_integer": {
       "match_mapping_type""string",
       "match":   "x_*",
       "mapping": {
         "type""integer"
       }
     },
     "string_mapping": {
       "match_mapping_type""string",
       "mapping": {
         "type""keyword"
       }
     }    
   }
 ]
}      

6. 對一個文檔的多個字段進行查詢

要求最終的算分是幾個字段上算分的總和,同時要求對f3字段設置 boosting 值為2

其實就是用 most_fields 沒什麼特別的

用 most_fields 欄位分數總合 總和 f3  需要 match fire 的string

boosting 值為2 等同於 ^2

GET appple/_search
{
 "query": {
   "multi_match": {
     "query""apple pad",
     "fields": ["f1","f2","f3^2"],
     "type" : "most_fields"
   }
 }
}    

7. 給了一個地震的index  要求每個月最大的震度跟深度

GET 地震/_search
{
 "size": 0,
 "aggs": {
   "dt": {
     "date_histogram": {
       "field""@timestamp",
       "interval""month"
     },
     "aggs": {
       "最大震度": {
         "max": {
           "field""震度"
         }
       },
       "最大深度": {
         "max": {
           "field""深度"
         }
       }
     }
   }
 }
}

8. 依照題目把security 打開

elastic  帳號  密碼設定為 elastic

kibana   帳號  密碼設定為 kibana

建立一個使用者 aaa

密碼為 password

  • role   kibana_user
  • full name  AAA
  • email   aaa@elastic.co
    (送分題一定要會)

原本在kibana 設定user 但一直驗證失敗,我也搞不懂為什麼,

有球友的文章也有碰過此問題,多試幾次就好,但我沒試成功。

最後我是直接在 console 用curl 的指令處理的帳號密碼記得要輸入

curl -X POST -u elastic:elastic "localhost:9200/_security/user/jacknich?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "j@rV1s",
"roles" : [ "admin", "other_role1" ],
"full_name" : "Jack Nicholson",
"email" : "jacknich@example.com",
"metadata" : {
 "intelligence" : 7
}
}
'

9. 依照題目說明的備份

備份位置  elasticsearch.yml   增加  path.repo: /xxx/xxx 題目會給位置 備份index  備份的名稱  備份的store 建立備份

https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html

10. 針對字段 title 的值查詢高亮

並使用某字段 sort descing 把  改成指定的

注意

如果英文不好的不用擔心,可以和考官申請在考試環境開估狗翻譯

文字的用法跟大家熟悉的可能會不太一樣,還請見諒,謝謝各位球友!


注:球友来自宝岛台湾,所以用了繁体。不影响阅读,所以保留了原稿格式。

连续25球友通过认证的全量经验贴:https://t.zsxq.com/BYrrniy

短时间快习得多干货!

中国近 1/4 的 Elastic认证工程师出自于此!

浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报