1. 程式人生 > >Elasticsearch簡單操作(Java程式碼)

Elasticsearch簡單操作(Java程式碼)

1.首先安裝Elasticsearch,配置相關檔案,並啟動服務

2.建立專案,匯入相關Jar包

3.建立ElasticsearchUtils類,裡面包括初始化操作和建立索引、更新索引、刪除索引、查詢索引

(1)初始化操作,需要傳入叢集名稱和ip地址,叢集名稱本例子使用elasticsearch配置檔案中配置的cluster name,IP地址使用localhost

[java] view plain copy print?
  1. publicclass ElasticsearchUtils {  
  2.     private Client client;  
  3.     public ElasticsearchUtils(String clusterName, String ipAddress) {  
  4.         Settings settings = ImmutableSettings  
  5.                 .settingsBuilder()  
  6.                 //設定叢集名稱 
  7.                 .put(”cluster.name”, clusterName)  
  8.                 .put(”client.transport.ignore_cluster_name”false)  
  9.                 .put(”node.client”true).put(“client.transport.sniff”true
    )  
  10.                 .build();  
  11.         client = new TransportClient(settings)  
  12.                 .addTransportAddress(new InetSocketTransportAddress(ipAddress,  
  13.                         9300));//此處埠號為9300
  14.     }  
  15. }  
public class ElasticsearchUtils {

    private Client client;

    public ElasticsearchUtils(String clusterName, String ipAddress) {
        Settings settings = ImmutableSettings
                .settingsBuilder()
                //設定叢集名稱 
                .put("cluster.name", clusterName)
                .put("client.transport.ignore_cluster_name", false)
                .put("node.client", true).put("client.transport.sniff", true)
                .build();
        client = new TransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(ipAddress,
                        9300));//此處埠號為9300
    }
}

(2)建立索引 [java] view plain copy print?
  1. /** 
  2.      * 建立索引 
  3.      * @param indexName 索引名稱,相當於資料庫名稱 
  4.      * @param typeName 索引型別,相當於資料庫中的表名 
  5.      * @param id id名稱,相當於每個表中某一行記錄的標識 
  6.      * @param jsonData json資料 
  7.      */
  8.     publicvoid createIndex(String indexName, String typeName, String id,  
  9.             String jsonData) {  
  10.         IndexRequestBuilder requestBuilder = client.prepareIndex(indexName,  
  11.             typeName, id).setRefresh(true);//設定索引名稱,索引型別,id
  12.         requestBuilder.setSource(jsonData).execute().actionGet();//建立索引
  13.     }  
/**
     * 建立索引
     * @param indexName 索引名稱,相當於資料庫名稱
     * @param typeName 索引型別,相當於資料庫中的表名
     * @param id id名稱,相當於每個表中某一行記錄的標識
     * @param jsonData json資料
     */
    public void createIndex(String indexName, String typeName, String id,
            String jsonData) {
        IndexRequestBuilder requestBuilder = client.prepareIndex(indexName,
            typeName, id).setRefresh(true);//設定索引名稱,索引型別,id
        requestBuilder.setSource(jsonData).execute().actionGet();//建立索引
    }
(3)查詢索引 [java] view plain copy print?
  1. /** 
  2.     * 執行搜尋 
  3.     * @param indexname 索引名稱 
  4.     * @param type 索引型別 
  5.     * @param queryBuilder 查詢條件 
  6.     * @return 
  7.     */
  8.    public SearchResponse searcher(String indexName, String typeName,  
  9.            QueryBuilder queryBuilder) {  
  10.        SearchResponse searchResponse = client.prepareSearch(indexName)  
  11.                .setTypes(typeName).setQuery(queryBuilder).execute()  
  12.                .actionGet();//執行查詢
  13.        return searchResponse;  
  14.    }  
 /**
     * 執行搜尋
     * @param indexname 索引名稱
     * @param type 索引型別
     * @param queryBuilder 查詢條件
     * @return
     */
    public SearchResponse searcher(String indexName, String typeName,
            QueryBuilder queryBuilder) {
        SearchResponse searchResponse = client.prepareSearch(indexName)
                .setTypes(typeName).setQuery(queryBuilder).execute()
                .actionGet();//執行查詢
        return searchResponse;
    }

(4)更新索引 [java] view plain copy print?
  1. /** 
  2.     * 更新索引 
  3.     * @param indexName 索引名稱 
  4.     * @param typeName 索引型別 
  5.     * @param id id名稱 
  6.     * @param jsonData json資料 
  7.     */
  8.    publicvoid updateIndex(String indexName, String typeName, String id,  
  9.            String jsonData) {  
  10.        UpdateRequest updateRequest = new UpdateRequest();  
  11.        updateRequest.index(indexName);//設定索引名稱
  12.        updateRequest.id(id);//設定id
  13.        updateRequest.type(typeName);//設定索引型別
  14.        updateRequest.doc(jsonData);//更新資料
  15.        client.update(updateRequest).actionGet();//執行更新
  16.    }  
 /**
     * 更新索引
     * @param indexName 索引名稱
     * @param typeName 索引型別
     * @param id id名稱
     * @param jsonData json資料
     */
    public void updateIndex(String indexName, String typeName, String id,
            String jsonData) {
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index(indexName);//設定索引名稱
        updateRequest.id(id);//設定id
        updateRequest.type(typeName);//設定索引型別
        updateRequest.doc(jsonData);//更新資料
        client.update(updateRequest).actionGet();//執行更新
    }

(5)刪除索引 [java] view plain copy print?
  1. /** 
  2.     * 刪除索引 
  3.     * @param indexName 
  4.     * @param typeName 
  5.     * @param id 
  6.     */
  7.    publicvoid deleteIndex(String indexName, String typeName, String id) {  
  8.        client.prepareDelete(indexName, typeName, id).get();  
  9.    }  
 /**
     * 刪除索引
     * @param indexName
     * @param typeName
     * @param id
     */
    public void deleteIndex(String indexName, String typeName, String id) {
        client.prepareDelete(indexName, typeName, id).get();
    }
4.建立測試類 [java] view plain copy print?
  1. package com.elasticsearch.test;  
  2. import org.elasticsearch.action.search.SearchResponse;  
  3. import org.elasticsearch.index.query.QueryBuilder;  
  4. import org.elasticsearch.index.query.QueryBuilders;  
  5. import org.elasticsearch.search.SearchHit;  
  6. import org.elasticsearch.search.SearchHits;  
  7. publicclass Test {  
  8.     publicstaticvoid main(String[] args) {  
  9.         //建立物件,設定叢集名稱和IP地址
  10.         ElasticsearchUtils es = new ElasticsearchUtils(“im_shan”,  
  11.                 ”localhost”);  
  12.         String indexName = ”school”;//索引名稱
  13.         String typeName = ”student”;//型別名稱
  14.         String id = ”1”;  
  15.         String jsonData = ”{“ + “\”name\”:\”kimchy\”,”
  16.                 + ”\”birth\”:\”1995-01-30\”,” + “\”email\”:\”[email protected]\”“
  17.                 + ”}”;//json資料
  18.         //1.建立索引(ID可自定義也可以自動建立,此處使用自定義ID)
  19.         es.createIndex(indexName, typeName, id, jsonData);  
  20.         //2.執行查詢
  21.         //(1)建立查詢條件
  22.         QueryBuilder queryBuilder = QueryBuilders.termQuery(”name”“kimchy”);//搜尋name為kimchy的資料
  23.         //(2)執行查詢
  24.         SearchResponse searchResponse = es.searcher(indexName, typeName,  
  25.             queryBuilder);  
  26.         //(3)解析結果
  27.         SearchHits hits = searchResponse.getHits();  
  28.         SearchHit[] searchHits = hits.getHits();  
  29.         for (SearchHit searchHit : searchHits) {  
  30.             String name = (String) searchHit.getSource().get(”name”);  
  31.             String birth = (String) searchHit.getSource().get(”birth”);  
  32.             String email = (String) searchHit.getSource().get(”email”);  
  33.             System.out.println(name);  
  34.             System.out.println(birth);  
  35.             System.out.println(email);  
  36.         }  
  37.         //3.更新資料
  38.         jsonData = ”{“ + “\”name\”:\”jack\”,” + “\”birth\”:\”1996-01-30\”,”
  39.                 + ”\”email\”:\”[email protected]\”“ + “}”;//json資料
  40.         es.updateIndex(indexName, typeName, id, jsonData);  
  41.         //4.刪除資料
  42.         es.deleteIndex(indexName, typeName, id);  
  43.     }  
  44. }  
package com.elasticsearch.test;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

public class Test {
    public static void main(String[] args) {
        //建立物件,設定叢集名稱和IP地址
        ElasticsearchUtils es = new ElasticsearchUtils("im_shan",
                "localhost");
        String indexName = "school";//索引名稱
        String typeName = "student";//型別名稱
        String id = "1";
        String jsonData = "{" + "\"name\":\"kimchy\","
                + "\"birth\":\"1995-01-30\"," + "\"email\":\"[email protected]\""
                + "}";//json資料
        //1.建立索引(ID可自定義也可以自動建立,此處使用自定義ID)
        es.createIndex(indexName, typeName, id, jsonData);

        //2.執行查詢
        //(1)建立查詢條件
        QueryBuilder queryBuilder = QueryBuilders.termQuery("name", "kimchy");//搜尋name為kimchy的資料
        //(2)執行查詢
        SearchResponse searchResponse = es.searcher(indexName, typeName,
            queryBuilder);
        //(3)解析結果
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit searchHit : searchHits) {
            String name = (String) searchHit.getSource().get("name");
            String birth = (String) searchHit.getSource().get("birth");
            String email = (String) searchHit.getSource().get("email");
            System.out.println(name);
            System.out.println(birth);
            System.out.println(email);
        }

        //3.更新資料
        jsonData = "{" + "\"name\":\"jack\"," + "\"birth\":\"1996-01-30\","
                + "\"email\":\"[email protected]\"" + "}";//json資料
        es.updateIndex(indexName, typeName, id, jsonData);

        //4.刪除資料
        es.deleteIndex(indexName, typeName, id);
    }
}

1.建立索引之後,可以在瀏覽器輸入http://localhost:9200/_plugin/head/ 進行檢視,可以發現索引已建立,index名稱為school,type為student,id為1


2.查詢索引,控制檯會輸出name為kimchy的birth、email的值

3.更新索引,此時再次進入http://localhost:9200/_plugin/head/ 進行檢視,發現內容已經改變



4.刪除索引,程式碼執行後輸入http://localhost:9200/_plugin/head/ 檢視,內容已清空