1. 程式人生 > >Elasticsearch使用REST API實現全文檢索

Elasticsearch使用REST API實現全文檢索

通過rest api新增檢索資料,閱讀官方文件可以發現,elasticsearch支援動態對映,但是其中有不少問題,且聽慢慢詳解。

本文主要講述三點內容:

1 Elasticsearch常用的rest api

2 Elasticsearch使用bulk命令新增索引資料

ES REST API

  elasticsearch支援通過http請求響應服務,因此通過curl命令,可以傳送http請求,並得到json返回內容。

  常用的rest請求包括:

  檢查ES叢集狀態:

curl localhost:9200/_cat/health?v

  檢查ES節點狀態:

curl localhost:9200/_cat/nodes?v

  查詢所有的索引:

curl localhost:9200/_cat/indices?v

  建立索引這種方式在4.1版本下會出現問題,下一小節再說):

curl -XPUT localhost:9200/索引名字/型別/id -d {"name":"xingoo"}

  刪除索引

curl -XDELETE localhost:9200/索引名字

  查詢索引:

curl -XGET localhost:9200/索引名字/型別名字/id

ES 使用bulk 新增資料

  動態對映無法新增資料,不要擔心!可以使用bulk命令,新增json檔案內的資料。

  1 定義json資料檔案:

{"index":{"_index":"aaa123","_id":1}}
{"name":"xingoo","age":25}
{"index":{"_index":"aaa123","_id":2}}
{"name":"test111","age":31}
{"index":{"_index":"aaa123","_id":3}}
{"name":"test222","age":42}
{"index":{"_index":"aaa123","_id":4}}
{"name":"test333","age":13}

  注意的是,json檔名稱隨意指定,第一行定義了索引和一些常用欄位:

  _index定義了索引的名稱,如果沒有指定需要在curl命令中新增索引名稱欄位

  _type定義了索引的型別,如果沒有指定需要在curl命令中新增索引型別欄位

  _id定義了該行資料的id,如果沒有指定,會隨機生成一串數字。

  2 執行命令

  進入到json檔案所在的目錄,執行命令

curl localhost:9200/索引名稱/索引型別/_bulk?pretty --data-binary @data.json

  注意的是:

  如果json檔案中定義了_index和_type,那麼這裡可以不寫變成(即便寫了也會按照json檔案中的生成)

curl localhost:9200/_bulk?pretty --data-binary @data.json

  類似的,如果按照上面我們定義了_index卻沒有定義_type,那麼索引會是aaa123,型別為我們curl命令中指定的型別。

  可以看到上面雖然指定了索引名稱為bbb123,型別為ccc123,但是json檔案中指定了索引名稱為aaa123。

  最後的索引檔案中,索引名稱為aaa123,型別為ccc123。

  查詢索引狀態,可以發現正常了。