- Elasticsearch作為一門全文檢索技術,那它是如何使用的呢?
- 先學習Elasticsearch的一些語法,后續再在項目中實戰應用。
一、IK分詞器
這個IK分詞器有什么用?為什么要用它?
要知道計算機是老美搞出來的,它的很多東西對于中文來說其實是很不友好的。
關于分詞,即把一段中文或者別的劃分成一個個的關鍵字。
比如"我是中國人",可以分為多少個詞?
按照中國漢字語言,其分為“我”,“是”,“中國人”,“中國”,“國人”這5個。
也就是說用戶輸入上述5個詞語,都可以搜索到“我是中國人”這條數據。
而默認的中文分詞是將每個字看成一個詞,會被分為“我”,“是”,"中","國","人"。
這顯然是不符合要求的,所以用中文分詞器ik來解決這個問題。

①analyze:翻譯過來就是分析的意思,這里就可以理解成分詞。
②analyzer:這里也就是指分詞器,我們使用ik_max_word。
- ik_max_word為最細粒度劃分。
- ik_smart為最少切分。
這是ik分詞器提供的兩個分詞算法,至于具體是如何實現的,就要去研究它的算法了。
可以把上述代碼修改做一個對比,會發現使用ik_smart只能分三個詞:“我”,“是”,“中國人”
這里顯然使用ik_max_word更加的合適。
二、基本概念
Elasticsearch本質上也就是在存儲數據,其有很多概念可以和MySQL類似的。

為了方便學習將其和MySQL結合起來。
當然嚴格來說將這些概念對應起來不太準確,但目前就這樣理解也沒問題。
①索引庫indices
- MySQL中通過數據庫存儲數據。
- Elasticsearch中通過索引庫存儲索引。
indices本身也就是索引indexs的復數寫法。
②類型type
- 一個數據庫中可以創建多張表,比如說商品表,訂單表。
- 一個索引集也可以有不同類型的索引,比如說商品索引,訂單索引。
不過這有一個缺陷是會導致索引庫混亂,未來版本中會移除這個概念,emm…也不知道現在移除這個概念沒有,目前還沒來得及查。
③文檔document
- 數據庫中一條數據就是一行。
- 索引集中一條信息就是一個文檔
④字段field
- 數據庫中列就是每一行中的數據。
- 索引集中字段就是文檔中的屬性。
弄清楚了這些概念,接下來創建索引庫。
三、操作索引庫
昨天我們也說明過了,Elasticsearch是一個基于RESTful風格的搜索引擎。
Elasticsearch采用的是REST風格API,其API本質上也就是一次http請求:
1索引庫的創建

既然是請求,那自然就會有:
- 請求方式:PUT,其對應的就是創建。
- 請求路徑:/索引庫名
- 請求參數:這里是settings
這里settings是指索引庫的設置:
- number_of_shards:分片數量。
- number_of_rplicas:副本數量。
這個呢就涉及到了一些集群相關的概念,后續具體使用到的時候再做說明。
2索引庫的查詢與刪除
REST風格的方便之處就在于通過請求方式的不同就能實現不同的操作:

①查詢索引庫
請求方式GET對應的就是查詢操作。
請求路徑依舊是上述創建的索引庫,可以查詢出liuxiaoai01索引庫的信息。
②刪除索引庫
請求方式DELETE對應的就是刪除操作。
請求路徑依舊是上述創建的索引庫,可以刪除liuxiaoai01索引庫。
刪除后再次使用GET查詢對應的索引庫,會發現其會報錯了,證明刪除成功。
四、操作字段映射
創建了索引庫也就相當于有了database數據庫,接下來就是數據表并添加數據了。
1類型的創建

在索引庫中添加數據叫映射,這也是上述格式中_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類型的查詢

PUT對應著新增操作,GET也就對應著查詢操作了,關于類型沒有刪除和修改操作。
就相當于不能刪除和修改數據表的名稱,這點倒是和MySQL數據庫不一樣。
其查詢到的索引之間的映射關系也很清楚:
索引庫叫liuxiaoai01,通過mappings映射有goods這個索引類型,該類型下properties中有3個字段。
基本上知道了其單詞意思也就知道其作用了。
注意關于這個type不要弄混了:
- goods對應的是索引類型,相當于數據表。
- 上述多個類型對應的是字段的數據類型。
最后
行有不得反求諸己,我是@劉小愛