<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          兩個 Elasticsearch 線上實戰(zhàn)問題及解讀

          共 2745字,需瀏覽 6分鐘

           ·

          2020-11-05 13:37

          線上實戰(zhàn)問題 1

          1、知識點

          腳本的使用

          2、問題描述:

          你好,我想問一下,在 ES 里我想把兩個字段的值是一樣的查出來。

          但是其中一個字段是在一個字典里的,我該怎么寫啊?

          {
          ??"query":?{
          ????"bool":?{
          ??????"must":?{
          ????????"script":?{
          ??????????"script":?{
          ????????????"source":?"doc['user_id']=?doc['music.sec_uid']",
          ????????????"lang":?"painless"
          ??????????}
          ????????}
          ??????}
          ????}
          ??}
          }

          比如:我想要查詢 user_id 和 sec_uid 一樣的數(shù)據(jù),但是 sec_uid 是在 music 字典里。

          我怎么處理呢?

          3、問題分析

          需求核心是:比較兩個字段,把不同字段值相同的數(shù)據(jù)取出來。

          這個時候,要想到傳統(tǒng)的精準匹配搜索或者全文檢索搜索都不能解決問題。

          需要更高階的搜索才可以,此時腦子里要快速過文檔,當然也可以與查看文檔相結合。

          逐步定位文檔的位置:

          研讀官方給出的 Demo,基本就能得到問題的答案。

          這里會引申出一個非常重要的知識點,也是實戰(zhàn)業(yè)務場景反饋最多的檢索性能優(yōu)化特別注意的點:

          使用腳本可能會降低搜索速度。

          正如官方文檔解讀:

          • 腳本無法利用Elasticsearch的倒排索引結構或相關優(yōu)化。有時這可能會導致搜索速度降低。

          • 如果您經(jīng)常使用腳本來轉換索引數(shù)據(jù),則可以通過在攝取期間(數(shù)據(jù)寫入前通過 Ingest 管道方式)進行這些更改來加快搜索速度。但是,這通常意味著較慢的索引速度(數(shù)據(jù)寫入速度)。

          4、實戰(zhàn)解答

          PUT?test_002
          {
          ??"mappings":?{
          ????"properties":?{
          ??????"user_id":?{
          ????????"type":?"keyword"
          ??????},
          ??????"music":?{
          ????????"properties":?{
          ??????????"sec_uid":?{
          ????????????"type":?"keyword"
          ??????????}
          ????????}
          ??????}
          ????}
          ??}
          }

          GET?test_002/_mapping

          POST?test_002/_bulk
          {"index":{"_id":1}}
          {"user_id":333,"music.sec_uid":444}
          {"index":{"_id":2}}
          {"user_id":333,"music.sec_uid":333}
          {"index":{"_id":3}}
          {"user_id":333,"music.sec_uid":555}


          POST?test_002/_search
          {
          ??"query":?{
          ????"bool":?{
          ??????"filter":?[
          ????????{
          ??????????"script":?{
          ????????????"script":?{
          ??????????????"source":"doc['user_id']==doc['music.sec_uid']",
          ??????????????"lang":"painless"
          ????????????}
          ??????????}
          ????????}
          ??????]
          ????}
          ??}
          }

          線上實戰(zhàn)問題 2

          1、知識點

          update_by_query,? ingest 數(shù)據(jù)預處理 + painless 腳本的使用

          2、問題描述

          update腳本,某個時間字段time,都是 2020-08-10 xx:xx:xx, 如何將該字段所有值替換為2020-10-24 xx:xx:xx, 只改日期,不改時分秒。

          咋寫呢?求大佬們指點啊

          3、問題分析

          需求核心是:

          • 批量更新

          腦海里里面映射出:update_by_query

          • 基于特定值的一部分更新

          腦海里馬上映射出:painless 腳本處理

          • 腳本實現(xiàn)選型

          選型 1:直接 update_by_query 結合 painless

          選型 2:update_by_query 結合 inges t結合 painless 腳本處理

          我個人傾向于ingest,個人感覺語法相對友好。

          逐步定位文檔的位置:

          研讀官方給出的Demo,結合拆解的需求,基本就能得到問題的答案。

          注意:Ingest 是后來版本的新特性,但到了7.X版本,也已經(jīng)有很長時間了。大家用的少,但的確非常重要,建議要多用、常用常新!

          4、實戰(zhàn)解答(非最優(yōu)解)

          注意:以下是示例DSL。

          PUT?my_index
          {
          ??"mappings":?{
          ??????"properties":?{
          ????????"date":?{
          ??????????"type":?"keyword"?
          ????????}
          ????}
          ??}
          }

          PUT?my_index/_doc/2
          {
          ??"date":?"2015-01-01T12:10:30Z"
          }



          PUT?_ingest/pipeline/my_pipeline
          {
          ??"description":?"use?index:my-index",
          ??"processors":?[
          ????{
          ??????"script":?{
          ????????"lang":?"painless",
          ????????"source":?"ctx.data_new?=?ctx.date.replace('2015-01-01',?'2020-01-01')"
          ??????}
          ????}
          ??]
          }

          POST?my_index/_update_by_query?pipeline=my_pipeline
          {
          ??"query":{
          ????"match_all":{}
          ??}
          }

          GET?my_index/_search

          小結

          遇到問題不要慌,

          拆解問題來幫忙。

          拆解之后找文檔,

          結合文檔和拆解的需求,

          問題自然迎刃而解。

          通過拆解問題,得到遇到類似問題的應對策略和方法論比什么都重要!

          大家對問題又不同見解或者花式解法,歡迎留言交流。


          更多推薦:

          重磅 | 死磕 Elasticsearch 方法論認知清單(2020年國慶更新版)

          能拿駕照就能通過 Elastic 認證考試!


          短時間快習得多干貨!

          中國?40%+?Elastic 認證工程師出自于此!

          全球?800+?Elastic 愛好者一起死磕 Elasticsearch!

          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丰满人妻一区二区三区四区色 | 中文字幕日日夜夜 | 少妇无码免费视频 | 欧美美穴一区 | 91成人无码视频 |