Elasticsearch簡單使用系列--使用Java API進行CRUD操作

1.簡單介紹Elasticsearch和RDBMS對應的關係,便於記憶理解

Elasticsearch RDBMS
index database
type/mapping table
document/object row/record
field column

2.封裝一個獲取client的工具類


/**
 * @author lcj
 * @version 1.0
 * @description 獲取client
 * @Create 2017-06-19
 */
public  class TransportClientUtil {

    public static TransportClient getTransportClient(){
        Settings settings = Settings.builder()
                .put("cluster.name","es-cluster") //設置集羣的名字,默認是elasticsearch
                .put("client.transport.sniff",true) //啓用監聽器,每5秒刷新一次nodes
                .build();
        TransportClient client = null;
        try {
            client = new PreBuiltTransportClient(settings)
            //設置node
            //.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(System.getenv("COMPUTERNAME")),9300));
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(),9300));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return client;
    }
}

3.使用java api進行CRUD


/**
 * @author lcj
 * @version 1.0
 * @description 使用java api操作es node,進行簡單的crud
 * @Create 2017-06-22
 */
public class EsJavaApi {

    private static final Logger LOGGER = LoggerFactory.getLogger(EsJavaApi.class);

    private static TransportClient client = TransportClientUtil.getTransportClient();

    public static void main(String[] args) {
        //創建索引文檔
        //save();

        //搜索文檔
        //get();

        //更新文檔
        //update();

        //刪除文檔
        delete();

        //關閉鏈接
        client.close();

    }

    /**
     * pojo bean ,創建index 文檔
     */
    private static void save(){
        Book book = new Book();
        book.setName("jvm 虛擬機5");
        book.setAuthor("lcj4");
        book.setPublishTime(new Date().toString());
        book.setPrice(512.10);
        book.setId("17");

        ObjectMapper mapper = new ObjectMapper();
        try {
            byte[] bytes = mapper.writeValueAsBytes(book);
            IndexResponse response = client.prepareIndex("book","book",book.getId())
                    .setSource(bytes)
                    .get();

            System.out.println(response.getResult()); //CREATED
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 根據id,搜索文檔
     */
    private static void get(){
        GetResponse response = client.prepareGet("book","book","17")
                .setOperationThreaded(false) //默認爲true,在不同的線程執行
                .get();

        //{"id":"17","name":"jvm 虛擬機5","author":"lcj4","price":512.1,"publishTime":"Thu Jun 22 13:36:49 CST 2017"}
        System.out.println(response.getSourceAsString());

    }


    /**
     * 更新文檔
     */
    private static void update(){
        UpdateRequest updateRequest = new UpdateRequest();
        //指定索引
        updateRequest.index("book");
        //指定類型
        updateRequest.type("book");
        //指定id
        updateRequest.id("17");

        Book book = new Book();
        book.setName("jvm 虛擬機55");
        book.setAuthor("lcj4");
        book.setPublishTime(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
        book.setPrice(512.18);
        book.setId("17");

        ObjectMapper mapper = new ObjectMapper();

        //有很多重載方法
        //{"_index":"book","_type":"book","_id":"17","_version":2,"found":true,"_source":{"id":"17","name":"jvm 虛擬機55","author":"lcj4","price":512.18,"publishTime":"2017-06-22 13:45:22"}}
        try {
            updateRequest.doc(mapper.writeValueAsBytes(book));
            client.update(updateRequest).get();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*根據id刪除文檔*/
    private static void delete(){
        DeleteResponse response = client.prepareDelete("book","book","17")
                .get();
        //DeleteResponse[index=book,type=book,id=17,version=3,result=deleted,shards=ShardInfo{total=2, successful=1, failures=[]}]
        System.out.println(response);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章