elasticsearch的研究與使用(一)

序言
產品中需要支持分詞搜索,以前聽說過elastic search的分佈式搜索引擎,所以就動手研究下elastic search,以下的內容參考於https://www.elastic.co 的官方幫助文檔。

安裝

elastic search1.7的JDK版本至少爲1.7,確認本機是否安裝了JDK並設置了環境變量

java -version
這裏寫圖片描述
echo $JAVA_HOME
這裏寫圖片描述

下載es
curl -L -O https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz

解壓
tar -xvf elasticsearch-1.7.1.tar.gz

啓動es,當然這是單機的版本
cd elasticsearch-1.7.1/bin

./elasticsearch或者爲你的es集羣、節點分別設置名稱
這裏寫圖片描述
這樣es的安裝和啓動就完成了。


監控ES運行狀態

1 集羣健康狀態
curl ‘localhost:9200/_cat/health?v’
這裏寫圖片描述
es的集羣狀態有三種顏色:綠色和黃色是可工作的,只是黃色有些分片沒有被分配,紅色表示有些數據不可用。

2 節點健康狀態
curl ‘localhost:9200/_cat/nodes?v’
這裏寫圖片描述


Java API

es的maven 路徑
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.7.1</version>
</dependency>

Node Client 此中方式當前客戶端節點會加入es集羣中
Copy es的conf目錄下elastaicsearch.yml到src/main/resources
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

Transport Client 不會加入集羣

    Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", "my_es").build();
    TransportClient client = new TransportClient(settings);
    client.close();

 
 
創建文檔
es文檔格式要求爲json形式,有幾種方式去生成json格式的文檔
1 手動的生成json形式,也就是自己拼字符串
2 可以傳入Map作爲參數,map會自動的轉換爲json格式
3 可以用第三方庫序列化bean爲json格式
4 es內置的幫助類 XContentFactory.jsonBuilder()
 
 
筆者選用第四種方式
private static String createDocument() throws Exception{
XContentBuilder builder = jsonBuilder()
.startObject()
.field(“user”, “libingxin”)
.field(“postData”, new Date())
.field(“message”, “this is my test message”)
.endObject();

    return builder.string();

}

這裏寫圖片描述
驗證結果是否正確
這裏寫圖片描述

 
 
查詢文檔
這裏寫圖片描述

 
 
刪除文檔
該操作允許在相同節點的不同線程上執行
這裏寫圖片描述

 
 
更新文檔
這裏寫圖片描述
可以發現數據的version由1變成了2,證明更改成功

 
 
文檔合併
可以在既有的文檔中增加額外的字段
這裏寫圖片描述
查看合併後的數據
這裏寫圖片描述

 
 
批量操作
只走一次http請求,批量操作中允許添加和刪除文檔
這裏寫圖片描述
此外還可以es還提供了批量操作的定製化,可以監聽批量提交的前後以及失敗事件,批量提交的個數,刷新時間等,可以參考https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/bulk.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章