elasticsearch重建索引「elasticsearch創建索引命令」

學習計劃安排如下:

  • Elasticsearch作為一門全文檢索技術,那它是如何使用的呢?
  • 先學習Elasticsearch的一些語法,後續再在項目中實戰應用。

一、IK分詞器

這個IK分詞器有什麼用?為什麼要用它?

要知道計算機是老美搞出來的,它的很多東西對於中文來說其實是很不友好的。

關於分詞,即把一段中文或者別的劃分成一個個的關鍵字。

比如”我是中國人”,可以分為多少個詞?

按照中國漢字語言,其分為“我”,“是”,“中國人”,“中國”,“國人”這5個。

也就是說用戶輸入上述5個詞語,都可以搜索到“我是中國人”這條數據。

而默認的中文分詞是將每個字看成一個詞,會被分為“我”,“是”,”中”,”國”,”人”。

這顯然是不符合要求的,所以用中文分詞器ik來解決這個問題。

如何通過Elasticsearch創建索引庫?

①analyze:翻譯過來就是分析的意思,這裡就可以理解成分詞。

②analyzer:這裡也就是指分詞器,我們使用ik_max_word。

  • ik_max_word為最細粒度劃分。
  • ik_smart為最少切分。

這是ik分詞器提供的兩個分詞算法,至於具體是如何實現的,就要去研究它的算法了。

可以把上述代碼修改做一個對比,會發現使用ik_smart只能分三個詞:“我”,“是”,“中國人”

這裡顯然使用ik_max_word更加的合適。

二、基本概念

Elasticsearch本質上也就是在存儲數據,其有很多概念可以和MySQL類似的。

如何通過Elasticsearch創建索引庫?

為了方便學習將其和MySQL結合起來。

當然嚴格來說將這些概念對應起來不太準確,但目前就這樣理解也沒問題。

①索引庫indices

  • MySQL中通過數據庫存儲數據。
  • Elasticsearch中通過索引庫存儲索引。

indices本身也就是索引indexs的複數寫法。

②類型type

  • 一個數據庫中可以創建多張表,比如說商品表,訂單表。
  • 一個索引集也可以有不同類型的索引,比如說商品索引,訂單索引。

不過這有一個缺陷是會導致索引庫混亂,未來版本中會移除這個概念,emm…也不知道現在移除這個概念沒有,目前還沒來得及查。

③文檔document

  • 數據庫中一條數據就是一行。
  • 索引集中一條信息就是一個文檔

④字段field

  • 數據庫中列就是每一行中的數據。
  • 索引集中字段就是文檔中的屬性。

弄清楚了這些概念,接下來創建索引庫。

三、操作索引庫

昨天我們也說明過了,Elasticsearch是一個基於RESTful風格的搜索引擎。

Elasticsearch採用的是REST風格API,其API本質上也就是一次http請求:

1索引庫的創建

如何通過Elasticsearch創建索引庫?

既然是請求,那自然就會有:

  • 請求方式:PUT,其對應的就是創建。
  • 請求路徑:/索引庫名
  • 請求參數:這裡是settings

這裡settings是指索引庫的設置:

  • number_of_shards:分片數量。
  • number_of_rplicas:副本數量。

這個呢就涉及到了一些集群相關的概念,後續具體使用到的時候再做說明。

2索引庫的查詢與刪除

REST風格的方便之處就在於通過請求方式的不同就能實現不同的操作:

如何通過Elasticsearch創建索引庫?

①查詢索引庫

請求方式GET對應的就是查詢操作。

請求路徑依舊是上述創建的索引庫,可以查詢出liuxiaoai01索引庫的信息。

②刪除索引庫

請求方式DELETE對應的就是刪除操作。

請求路徑依舊是上述創建的索引庫,可以刪除liuxiaoai01索引庫。

刪除後再次使用GET查詢對應的索引庫,會發現其會報錯了,證明刪除成功。

四、操作字段映射

創建了索引庫也就相當於有了database數據庫,接下來就是數據表並添加數據了。

1類型的創建

如何通過Elasticsearch創建索引庫?

在索引庫中添加數據叫映射,這也是上述格式中_mapping的由來。

goods就是索引類型,也就是相當於數據庫中的goods數據表。

properties也就是屬性,其下添加對應的字段,上述中就有title,images,price三個字段,可以設置許多屬性:

  • type:int、long、short、date、integer、text、string……等多個。
  • index:根據語義理解就是是否被作為索引?
  • analyzer:也就是分詞器。

這個type是字段數據類型:int、long這些是數字類型,text、string是字符串類型。

  • 若是text類型,默認會分詞。
  • 若是String類型,默認不會分詞,上述中寫的keyword和String一回事,翻譯過來是關鍵字的意思,關鍵字肯定不能再分了,更好理解。

2類型的查詢

如何通過Elasticsearch創建索引庫?

PUT對應着新增操作,GET也就對應着查詢操作了,關於類型沒有刪除和修改操作。

就相當於不能刪除和修改數據表的名稱,這點倒是和MySQL數據庫不一樣。

其查詢到的索引之間的映射關係也很清楚:

索引庫叫liuxiaoai01,通過mappings映射有goods這個索引類型,該類型下properties中有3個字段。

基本上知道了其單詞意思也就知道其作用了。

注意關於這個type不要弄混了:

  • goods對應的是索引類型,相當於數據表。
  • 上述多個類型對應的是字段的數據類型。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/273760.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:08
下一篇 2024-12-17 14:08

相關推薦

發表回復

登錄後才能評論