真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Elasticsearch預(yù)處理的技巧示例分析

本篇文章為大家展示了Elasticsearch 預(yù)處理的技巧示例分析,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的江山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

 

1、上問題

 

1.1 線上實(shí)戰(zhàn)問題 1——字符串切分

es可以根據(jù)_id字符串切分,再聚合統(tǒng)計(jì)嗎 比如:數(shù)據(jù)1、_id=C12345 數(shù)據(jù)2、_id=C12456 數(shù)據(jù)3、_id=C31268

通過es聚合統(tǒng)計(jì) C1開頭的數(shù)量有2個(gè) C3開頭的數(shù)據(jù)有1個(gè)

這個(gè)API怎么寫,有大佬指導(dǎo)下嗎?

 

1.2 線上實(shí)戰(zhàn)問題 2——json 轉(zhuǎn) object

插入的時(shí)候,能不能對(duì)原數(shù)據(jù)進(jìn)行一定的轉(zhuǎn)化,再進(jìn)行indexing

{
    "headers":{
        "userInfo":[
            "{  \"password\": \"test\",\n  \"username\": \"zy\"}"
        ]
    }
}
 

這里面的已經(jīng)是字符串了,能在數(shù)據(jù)插入階段把這個(gè) json 轉(zhuǎn)成 object 么?

 

1.3 線上實(shí)戰(zhàn)問題 3——更新數(shù)組元素

我想對(duì)一個(gè)list每個(gè)值后面都加一個(gè)字符:

比如 {"tag":["a","b","c"]} 這樣一個(gè)文檔  我想變成  {"tag":["a2","b2","c2"]} 這樣的,

各位有沒有試過用 foreach 和 script 結(jié)合使用?

 

2、問題拆解分析

「問題 1」:分析環(huán)節(jié)需要聚合統(tǒng)計(jì),當(dāng)然用painless script 也能實(shí)現(xiàn),但數(shù)據(jù)量大,勢(shì)必有性能問題。

可以把數(shù)據(jù)處理前置,把前_id兩個(gè)字符提取出來,作為一個(gè)字段處理。

「問題 2」:寫入的時(shí)候期望做字符類型的轉(zhuǎn)換,把復(fù)雜的字符串轉(zhuǎn)換為格式化后的 Object 對(duì)象數(shù)據(jù)。

「問題 3」:數(shù)組類型數(shù)據(jù)全部規(guī)則化更新,當(dāng)然 painless script 腳本也可以實(shí)現(xiàn)。

但是,在寫入環(huán)節(jié)處理,就能極大減輕后面分析環(huán)節(jié)的負(fù)擔(dān)。

以上三個(gè)問題,寫入前用 java 或者 python 寫程序處理,然后再寫入 Elasticsearch 也是一種方案。

但,如果要死磕一把,有沒有更好的方案呢?能否在寫入前進(jìn)行數(shù)據(jù)的預(yù)處理呢?

 

3、什么是數(shù)據(jù)預(yù)處理

一般情況下,我們程序?qū)懭霐?shù)據(jù)或者從第三方數(shù)據(jù)源(MySQL、Oracle、HBase、Spark等)導(dǎo)入數(shù)據(jù),都是原始數(shù)據(jù)張什么樣,直接批量同步 ES,寫入ES索引化的數(shù)據(jù)就是什么樣。如下圖所示:

Elasticsearch 預(yù)處理的技巧示例分析

如前所述的三個(gè)實(shí)戰(zhàn)問題,實(shí)際業(yè)務(wù)數(shù)據(jù)可能不見得是我們真正分析環(huán)節(jié)所需要的。

需要對(duì)這些數(shù)據(jù)進(jìn)行合理的預(yù)處理后,才便于后面環(huán)節(jié)的分析和數(shù)據(jù)挖掘。

數(shù)據(jù)預(yù)處理的步驟大致拆解如下:

  • 數(shù)據(jù)清洗。

主要是為了去除 重復(fù)數(shù)據(jù),去噪音(即干擾數(shù)據(jù))以及填充缺省值。

  • 數(shù)據(jù)集成。

將多個(gè)數(shù)據(jù)源的數(shù)據(jù)放在一個(gè)統(tǒng)一的數(shù)據(jù)存儲(chǔ)中。

  • 數(shù)據(jù)轉(zhuǎn)換。

將數(shù)據(jù)轉(zhuǎn)化成適合數(shù)據(jù)挖掘或分析的形式。

在 Elasticsearch 中,有沒有預(yù)處理的實(shí)現(xiàn)呢?

 

4、Elasticsearch 數(shù)據(jù)預(yù)處理

Elasticsearch的ETL利器——Ingest節(jié)點(diǎn),已經(jīng)將節(jié)點(diǎn)角色劃分、Ingest 節(jié)點(diǎn)作用,Ingest 實(shí)踐、Ingest 和 logstash 預(yù)處理優(yōu)缺點(diǎn)對(duì)比都做了解讀。有相關(guān)盲點(diǎn)的同學(xué),可以移步過去過一遍知識(shí)點(diǎn)。

Ingest 節(jié)點(diǎn)的本質(zhì)——在實(shí)際文檔建立索引之前,使用 Ingest 節(jié)點(diǎn)對(duì)文檔進(jìn)行預(yù)處理。Ingest 節(jié)點(diǎn)攔截批量索引和單個(gè)索引請(qǐng)求,應(yīng)用轉(zhuǎn)換,然后將文檔傳遞回單個(gè)索引或批量索引API 寫入數(shù)據(jù)。

下面這張圖,比較形象的說明的 Elasticsearch 數(shù)據(jù)預(yù)處理的流程。

Elasticsearch 預(yù)處理的技巧示例分析

實(shí)際業(yè)務(wù)場(chǎng)景中,預(yù)處理步驟如下:

  • 步驟1:定義 Pipeline,通過 Pipeline 實(shí)現(xiàn)數(shù)據(jù)預(yù)處理。

根據(jù)實(shí)際要處理的復(fù)雜數(shù)據(jù)的特點(diǎn),有針對(duì)性的設(shè)置1個(gè)或者多個(gè) pipeline (管道),上圖的粉紅和黃色部分。

  • 步驟2:寫入數(shù)據(jù)關(guān)聯(lián)Pipeline。

寫入數(shù)據(jù)、更新數(shù)據(jù)或者 reindex 索引環(huán)節(jié),指定要處理索引的 pipeline , 實(shí)際就是寫入索引與上面的 pipeline0 和 pipelineZ 關(guān)聯(lián)起來。

  • 步驟3:寫入數(shù)據(jù)。

劃重點(diǎn):Ingest 實(shí)現(xiàn)在實(shí)際文檔編制索引(索引化)之前對(duì)文檔進(jìn)行預(yù)處理。

 

5、實(shí)踐一把

 

5.1 線上問題 1 實(shí)現(xiàn)

PUT _ingest/pipeline/split_id
{
  "processors": [
    {
      "script": {
        "lang": "painless",
        "source": "ctx.myid_prefix = ctx.myid.substring(0,2)"
      }
    }
  ]
}

 

借助 script 處理器中的 substring 提取子串,構(gòu)造新的前綴串字段,用于分析環(huán)節(jié)的聚合操作。

 

5.2 線上問題 2 實(shí)現(xiàn)

PUT _ingest/pipeline/json_builder
{
  "processors": [
    {
      "json": {
        "field": "headers.userInfo",
        "target_field": "headers.userInfo.target"
      }
    }
  ]
}
 

借助 json 處理器做字段類型轉(zhuǎn)換,字符串轉(zhuǎn)成了 json。

 

5.3 線上問題3 實(shí)現(xiàn)

PUT _ingest/pipeline/add_builder
{
  "processors": [
    {
      "script": {
        "lang": "painless",
        "source": """
for (int i=0; i < ctx.tag.length;i++) {
      ctx.tag[i]=ctx.tag[i]+"2";
    } 
"""
      }
    }
  ]
}
 

借助 script 處理器,循環(huán)遍歷數(shù)組,實(shí)現(xiàn)了每個(gè)數(shù)組字段內(nèi)容的再填充。

篇幅原因,更詳細(xì)解讀參見:

https://github.com/mingyitianxia/deep_elasticsearch/blob/master/es_dsl_study/1.ingest_dsl.md

 

6、不預(yù)處理 VS 預(yù)處理后寫入方案對(duì)比

「方案 1」:數(shù)據(jù)原樣導(dǎo)入Elasticsearch,分析階段再做 painless 腳本處理。簡(jiǎn)單粗暴。

導(dǎo)入一時(shí)爽,處理費(fèi)大勁!

如前所述,script 處理能力有限,且由于 script 徒增性能問題煩惱。

不推薦使用。

「方案 2」:提前借助 Ingest 節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)預(yù)處理,做好必要的數(shù)據(jù)的清洗(ETL) 操作,哪怕增大空間存儲(chǔ)(如新增字段),也要以空間換時(shí)間,為后續(xù)分析環(huán)節(jié)掃清障礙。

看似寫入變得復(fù)雜,實(shí)則必須。「以空間為分析贏取了時(shí)間」。

推薦使用。

 

7、常見問題

 

7.1 Ingest 節(jié)點(diǎn)是必須設(shè)置的嗎?

默認(rèn)情況下,所有節(jié)點(diǎn)都默認(rèn)啟用 Ingest,因此任何節(jié)點(diǎn)都可以完成數(shù)據(jù)的預(yù)處理任務(wù)。

但是,當(dāng)集群數(shù)據(jù)量級(jí)夠大,集群規(guī)模夠大后,建議拆分節(jié)點(diǎn)角色,和獨(dú)立主節(jié)點(diǎn)、獨(dú)立協(xié)調(diào)節(jié)點(diǎn)一樣,設(shè)置獨(dú)立專用的 Ingest 節(jié)點(diǎn)。

 

7.2 pipeline 什么時(shí)候指定呢?

創(chuàng)建索引、創(chuàng)建模板、更新索引、reindex 以及 update_by_query 環(huán)節(jié) 都可以指定 pipeline。

 

7.2.1 創(chuàng)建索引環(huán)節(jié)指定 pipeline

PUT ms-test
{
  "settings": {
    "index.default_pipeline": "init_pipeline"
  }
}
   

7.2.2 創(chuàng)建模板環(huán)節(jié)指定 pipeline

PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1,
    "index.default_pipeline":"add_builder"
  }
}
   

7.2.3 更新索引環(huán)節(jié)指定pipeline(原索引未指定)

PUT /my_index/_settings
{
    "index" : {
        "default_pipeline" : "my_pipeline"
    }
}
   

7.2.4  reindex 環(huán)節(jié)添加 pipeline

POST _reindex
{
  "source": {
    "index": "source"
  },
  "dest": {
    "index": "dest",
    "pipeline": "some_ingest_pipeline"
  }
}
   

7.2.5 update 環(huán)節(jié)指定pipeline

POST twitter/_update_by_query?pipeline=set-foo
   

上述內(nèi)容就是Elasticsearch 預(yù)處理的技巧示例分析,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章題目:Elasticsearch預(yù)處理的技巧示例分析
分享鏈接:http://weahome.cn/article/gcehej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部