[料理佳餚] 在 Elasticsearch 建立索引資料

Elasticsearch 架好之後,最重要的是要拿它來建立索引資料,提供我們快速的搜尋服務,類似的搜尋服務有雲端的 Microsoft Azure Search,還有一樣是 Open Source 的 Solr,會介紹 Elasticsearch 主要是它操作起來非常簡單。

先建立一個 Index

利用 kopf 的介面,直接 create index。

在 name 的欄位輸入 Index 的名字(注意:Index name 必須都要是小寫),而 number of shards, number of replicas 可以用預設的,number of shards 的預設值是 5,number of replicas 預設值是 1。

確認後,按 Create 就建立完成了。

一般來說如果 Elasticsearch 的服務沒有什麼異常狀況,kopf 工具列就會是綠色的,而上圖的工具列呈現的不是綠色,代表發生了某些問題。

而上圖呈現的問題是,我們有 5×2 個 shards,可是我們只有 1 台伺服器,所以有 5 個 shards 沒有被分配到,不過這並不影響搜尋服務的運作狀況,只是在當這唯一一台伺服器掛點的時候,沒有其他伺服器可以接手搜尋服務。

假設我有一筆資料長得像下面這個樣子

{
   "id": "X999_Y999",
   "from": {
      "name": "Tom Brady", "id": "X12"
   },
   "message": "Looking forward to 2010!",
   "actions": [
      {
         "name": "Comment",
         "link": "http://www.facebook.com/X999/posts/Y999"
      },
      {
         "name": "Like",
         "link": "http://www.facebook.com/X999/posts/Y999"
      }
   ],
   "type": "status",
   "created_time": "2010-08-02T21:27:44+0000",
   "updated_time": "2010-08-02T21:27:44+0000"
}

我利用 kopf 的 rest 工具(紅框處) 直接將這筆資料送給 Elasticsearch 索引,在藍框處鍵入 [index]/[type] 的相對路徑,以我的例子來講 index = mytestindex, type = mytype(我自己取的 type 名稱),而橘框處則是我要塞入的 JSON 資料字串。

如果這邊不懂 index, type, document 之間的關係,請回頭看我這篇文章[料理佳餚] 介紹 Elasticsearch 分散式搜尋系統

索引成功後,右邊的 RESPONSE 區域就會收到成功的資訊。

執行關鍵字搜尋服務

當我們把想要索引的資料塞給 Elasticsearch 索引完畢後,我們就可以來搜尋了。

我們一樣使用 kopf 的 rest 工具,在藍框處鍵入 _search?q=[關鍵字],而我就來找內容有 Brady 這個關鍵字的資料,搜尋的結果就會顯示在右邊橘框處。

我們也可以針對特定欄位執行關鍵字搜尋,例如,我要找 from.name 有 Brady 關鍵字的資料,一樣可以。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學