ElasticSearch介紹及基本API

1. ES基本介紹

https://blog.csdn.net/achuo/article/details/87865141Elasticsearch學習,請先看這一篇!內容比較完備,推薦閱讀

2. API操作練習

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author YDAlex
 * @version 1.0
 * @description 用javaAPI操作ES集羣練習
 * @data 2019/11/20.
 */
public class EsJavaClient
{

    private static final String INDEX = "javaindex";
    private static final String TYPE = "javatype";
    private static  TransportClient client;

    @Before
    public void init() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name","MyES")
                .put("client.transport.sniff", "true")//增加自動嗅探配置
                .build();

        client = new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop"), 9300));

        System.out.println(client.toString());
    }
    @Test
    public void createIndex() {
        client.admin().indices().prepareCreate(INDEX).get();
        System.out.println("創建Index成功");
    }

    @Test
    public void deleteIndex() {
        client.admin().indices().prepareDelete(INDEX).get();
        System.out.println("刪除Index成功");
    }

    //不推薦使用
    @Test
    public void createDoc() {
        String json = "{\"name\":\"GPY\"}";

        IndexResponse response = client.prepareIndex(INDEX, TYPE, "100")
                .setSource(json, XContentType.JSON)
                .get();
        System.out.println("返回的結果是:"+response);
    }

    //推薦使用
    @Test
    public void createDoc01() {
        Map<String, Object> json = new HashMap<>();
        json.put("name", "GPY");
        json.put("message", "trying out Elasticsearch");

        IndexResponse response = client.prepareIndex(INDEX, TYPE, "101").setSource(json).get();
        System.out.println(response.getVersion());
    }


    //推薦使用
    @Test
    public void createDoc02() throws IOException {

        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                .field("user", "GPY")
                .field("postDate", new Date())
                .field("message", "trying out Elasticsearch")
                .endObject();

        IndexResponse response = client.prepareIndex(INDEX, TYPE, "102").setSource(builder).get();
        System.out.println(response.getVersion());
    }

    @Test
    public void getDoc() {
        GetResponse response = client.prepareGet(INDEX, TYPE, "100").get();
        System.out.println(response.getSourceAsString());
    }

    @Test
    public void getDocsByIds() {

        MultiGetResponse responses = client.prepareMultiGet()
                .add(INDEX, TYPE,"100")
                .add(INDEX, TYPE, "101", "102", "1000")
                .get();

        for (MultiGetItemResponse response : responses) {
            GetResponse res = response.getResponse();
            if (res.isExists()) {
                System.out.println(res);
            } else {
                System.out.println("沒有這條數據");
            }

        }
    }

    @Test
    public void testBatchDealWith(){
        //需求使用批處理技術,操作es索引之javaindex
        //新增索引name:beam,author:haha,version:4.4.4
        //刪除索引id:100
        //修改索引id爲102的信息,message:has changed

        BulkItemResponse []itms =  client.prepareBulk()
                .add(new IndexRequest(INDEX,TYPE).source("name","beam","author","haha","version","4.4.4"))
                .add(new DeleteRequest(INDEX,TYPE,"100"))
                .add(new UpdateRequest(INDEX,TYPE,"102").doc("message","has changed"))
                .get().getItems();

        for (BulkItemResponse itm: itms) {
            itm.isFailed();
        }


    }


    @After
    public void close(){
        client.close();
    }
}

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