天天看點

Elastic Search 新手入門筆記(一)

前言

因為最近在寫一個功能點是與Elastic Search 相關的,是以最近在完成功能的基礎上,還去查了很多有關于Elastic Search的文檔。Elastic Search 的 client ,還是不少的,但是現在我隻用了Java High Level REST Client。下面是進行的總結,希望也可以幫助像我一樣的小白。

多說一點:

這是我的第一篇筆記,作為一個馬上要畢業的大學生來說,多學,多聽,多積累,是很有必要的。有可能語言上比較晦澀難懂,技術的闡述上也不是那麼娴熟準确,但是我會好好努力的。

為什麼用到Elastic Search?

這裡的Elastic Search 泛指的是全文檢索。在剛接觸的時候,我想過這樣一個問題,在關系型資料庫mysql的

like

進行模糊查詢的效果,與Elastic Search這樣的全文檢索,效果幾乎就是一樣的,那為什麼還要用全文檢索呢?如果是學了一些的現在的我,遇上了剛開始接觸全文檢索的我的話,一定會指着自己的鼻子說:“你真是無知啊。”

原因我覺得一共有兩個:

第一個是查詢的速度特别快!在關系型資料庫中,資料是結構化的,我們當要進行模糊查詢的時候,會從想要查詢的表的第一條資料開始比對,如果不是,繼續下一條,如果再不是,繼續去查,就這樣一直查下去,直到查到了,自己想要的那條資料。而Elastic Search呢?它其實使用了反向索引的索引方法。大概意思其實是這樣的:現在一個有三篇文章

|   id    |         content               |

|--------|------------------------------|

|文章1| Java是世界上最好的 . |

|文章2| 人生苦短,快學python|

|文章3| C++是世界上最難的 .  |

這也是存儲在關系型資料庫中的存儲形式,查詢的話,他會一行行的進行查詢。而如果存在了Elastic Search 中會變成什麼樣子呢?在全文檢索中存在這分詞器這麼個東西,分詞器會把輸入的句子自動的進行一定規律進行分割,例如過空格分割,下劃線分割,等等。如果是中文,也有插件可以對其進行語義分割。分割後的效果如下所示(隻是舉例子,真實情況未必如此)

|關鍵詞   | 文章号|

|------------|----------|

|世界       | 1,3    |

|人生苦短|   2 .     |

|Java       |   1 .     |

|python    |   2       |

|C++        |   3       |        

當我們輸入世界,立刻就知道出現在了第一個,和第三個文章中。

第二個是因為我們在做全文檢索的時候,根本用不到那麼複雜的邏輯,我們用到基礎的增删改查就行,使用了Elastic Search 之後,我們在用不用折騰資料庫那麼多的資料了。

我們怎麼去使用Elastic Search?

在我們看來學習一門新的技術最主要的還是要去多看看官網,最基本能用到的官網應該都會說。這是官網傳送門:

https://www.elastic.co/

 ,接下來是 rest high level api的傳送門:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.3/java-rest-high-getting-started-initialization.html

。官網上有怎麼進行下載下傳,安裝,如何使用的方法。如果覺得官網寫的不是那麼細緻還有大牛們在各大部落格上,進行的知識分享。

以下是使用Rest high level api 操縱Elastic Search的

https://www.cnblogs.com/ginb/p/8716485.html https://blog.csdn.net/paditang/article/details/78802799

還有使用curl操縱Elastic Search 的

https://www.cnblogs.com/mycd/p/7859792.html

個人使用經驗

剛使用了半個多月,以下是我的個人拙見,分析也不是特别全面。

我個人在簡單的連接配接到Elastic Search 的時候,使用的是Post Man,有可能是因為先入為主的原因吧,在上大學的時候,無意間接觸到了這個神奇,然後便一發不可收拾。它可以發送get,post , put, delete 等 所有的rest api 。并且可以攜帶上各種參數,無論是在請求頭,還是請求體。不但如此,在有spring security防護下的項目,我們可以攜帶上token進行通路。不但如此,我最喜歡的還是他能存儲url的功能,友善快捷。所有這些功能,再有可視化界面的加持下,顯得更加的舒服。

Post Man 操縱Elastic Search 指令如下 :

首先我先聲明一個全局變量(開個玩笑)其實就是把下文中的所有

http://ip:port/_index/_type

換成了

ES

,這裡值得說一下的是_index類似于像是database的概念,_type類似于table的概念。以上參數都可以換成自己對應的參數。

創造一個文檔,我們使用PUT請求,url為: ES/_id content-type選擇application/json,然後寫一個json資料例如:

{

    "first_name" : "John",

    "last_name" :  "Smith",

    "age" :        25,

    "about" :      "I love to go rock climbing",

    "interests": [ "sports", "music" ]

}

這樣就成功建立了一個文檔。可以使用不同的_id建立多個文檔,如果我們使用了相同的id使用不同的json資料,那麼相當于修改操作。

查詢一個文檔,我們使用GET請求,url為:ES/_id。在這裡如果添加了?pretty。形如ES/_id?pretty那麼結果就會顯示為整齊json格式。傳回的結果中的 _source為本文檔使用者插入的資料,其餘的為這篇文檔的中繼資料。

如果我們使用了ES/_search,那麼就是不添加任何條件,進行全部搜尋。

如果想進行準确查詢ES/_search?q=key:value。在這裡key為想要查詢的字段,value為想要查詢的結果。

删除一篇文檔,我估計我不說,大家也會猜出來了吧。沒錯,就是使用DELETE請求,發送ES/_id即可。

本文純手打,不但是對自己學習的一種總結,也希望可以幫助到需要幫助的人,謝謝大家。不喜勿噴。