iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
Elastic Stack on Cloud

Elastic 30天自我修行系列 第 19

上傳三國演義第一回囉

  • 分享至 

  • twitterImage
  •  

三國演義小說的文字檔,很容易在網路上取得。先複製貼上第一回到你習慣的文字編輯器中,先將斷行符號移除,讓整個第一回變成一行(Line)。
如果你和我一樣也是使用 Visual Studio Code 可以啟用正規表達式,將"\n"取代為空白即可。

今天要做的事情,很單純,就是上傳三國演義第一回,本來想要上傳整本合計 120回;但因為遇到諸多問題,請容我後續再整部上傳吧。

今天實作是參考 elastic co 部落格 https://www.elastic.co/blog/how-to-search-ch-jp-kr-part-2 。但最終變成了踩雷之旅。
裡面提到的 PUT mappings,由於7.0版之後的API變動了,所以無法再使用了。請參見最新的文件:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
這是今天遇到的第一個狀況。

總之,我們先不管那麼多,先把第一回直接用 POST 丟上去吧:

PUT Three_Kingdoms/docs/1
{  
  "body" :"第一回..." 
}

https://ithelp.ithome.com.tw/upload/images/20200919/20130033WO9wCwytnq.png

啊~這是我自己的過錯,index的命名只接受小寫
https://ithelp.ithome.com.tw/upload/images/20200919/20130033RQrRPLbIYu.png

再試一次,果然成功囉!
https://ithelp.ithome.com.tw/upload/images/20200919/20130033oiRM2kefIA.png

我們可以試著蒐尋看看,第一回張飛是不是已經登場了

POST three_kingdoms/docs/_count

{
  "query": {
    "multi_match": {
      "query": "張飛",
      "fields": [
        "body"
      ]
    }
  }
}

是的,張飛第一回就登場囉

https://ithelp.ithome.com.tw/upload/images/20200919/20130033xNSBbJj6kW.png

再看看張飛與董卓是否也一起登場了

POST three_kingdoms/docs/_count

{
 "query": {
   "multi_match": {
     "query": "張飛 董卓",
     "fields": [
       "body"
     ]
   }
 }
}

https://ithelp.ithome.com.tw/upload/images/20200919/20130033ZFL0wkjjVk.png

再看看趙雲是不是也登場了

POST three_kingdoms/docs/_count

{
  "query": {
    "multi_match": {
      "query": "趙雲
      "fields": [
        "body"
      ]
    }
  }
}

https://ithelp.ithome.com.tw/upload/images/20200919/20130033KkT3mk3FAP.png

咦不對啊!!!
為什麼趙雲會在第一回就出場了

試了一下,原來是因為我沒有合理的設定蒐尋條件。
對於 ElasticSearch 來說,它認為只要 "趙" 或 "雲"其中有一個條件成立就計算為1筆。

新增 "operator": "and", "minimum_should_match": 2 的篩選條件,總算不再出現趙雲囉

POST three_kingdoms/docs/_count

{
  "query": {
    "multi_match": {
      "operator": "and", 
       "minimum_should_match": 2,
      "query": "趙雲",
      "fields": [
        "body"
      ]
    }
  }
}

或是改用正規表達式,也可以!

POST three_kingdoms/docs/_count
{
  "query": {
    "regexp": {
      "body": "趙雲"
    }
  }
}

https://ithelp.ithome.com.tw/upload/images/20200919/20130033R4F2rA52HK.pnghttps://ithelp.ithome.com.tw/upload/images/20200919/20130033wNOekpyAI2.png

光是從三國演義第一回的範例中,就可以看出 ElasticSearch 與一般資料庫相比,在字串蒐尋上的強大。
但也因為它的強大,所以會讓初學者的我一再的撞牆。也可以發現新舊版的API的差異,因為 ElasticSearch的更新非常的快速,所以就連官網2018年的部落格文章中的 PUT mapping 也無法直接延用,請直接參考官方的API文件進行閱讀。

總之,接下來的日子,讓我好好的慢慢與 API 文件更熟悉些吧!


上一篇
透過 Data Visualizer 上傳Log檔(semi-structured text)
下一篇
在 Elastic Cloud 安裝中文分詞外掛
系列文
Elastic 30天自我修行31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言