POST和PUT区别

PUT 和 POST 都可以插入和更新数据,区别在于

PUT 增加或更新新数据必须跟上id(这里的 id 指 _doc_id),即

  1. PUT stu/_doc/1001

image.png

而 POST 增加或更新数据则可以不跟 id,此时会为增加或更新的数据 自动生成一个 id

Java客户端操作

新增文档,ElasticSearch 中有索引,然后是文档,文档在索引中,类似于数据库中表在库中的概念。
写数据(即新增文档)

import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.core.Index;

import java.io.IOException;

public class EsWriter {
    public static void main(String[] args) throws IOException {

        // 1.获取客户端连接对象
        JestClientFactory jestClientFactory = new JestClientFactory();

        HttpClientConfig httpClientConfig =
                new HttpClientConfig.Builder("http://hadoop102:9200").build();
        jestClientFactory.setHttpClientConfig(httpClientConfig);

        JestClient jestClient = jestClientFactory.getObject();

        // 2.建立索引,Builder括号中为新建索引的语句
        // Index要导的包为 import io.searchbox.core.Index;
        // 待执行的语句为:
        // PUT test5/_doc/2
        // {
        //   "name":"张三",
        //   "age":17
        // }
        Index index = new Index.Builder("{\n" +
                "  \"name\":\"zhangsan\",\n" +
                "  \"age\":17\n" +
                "}"
        ).index("test5").type("_doc").id("2").build();

        // 3.执行语句
        jestClient.execute(index);

        // 4.关闭客户端连接
        jestClient.shutdownClient();
    }
}

读数据(即查取文档)

import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;

import javax.naming.directory.SearchControls;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class EsReader {
    public static void main(String[] args) throws IOException {


        JestClientFactory jestClientFactory = new JestClientFactory();
        jestClientFactory.setHttpClientConfig(
                new HttpClientConfig.Builder("http://hadoop102:9200").build());
        JestClient jestClient = jestClientFactory.getObject();

        // 查询语句为
        //GET test5/_search
        //{
        //  "query": {
        //    "match": {
        //      "name": "张三"
        //    }
        //  }
        //}
        Search search = new Search.Builder("{\n" +
                "  \"query\": {\n" +
                "    \"match\": {\n" +
                "      \"name\": \"张三\"\n" +
                "    }\n" +
                "  }\n" +
                "}").addIndex("test5").addType("_doc").build();
        SearchResult result = jestClient.execute(search);

        System.out.println("共有 " + result.getTotal() + " 查询结果");
        List<SearchResult.Hit<Map, Void>> hits = result.getHits(Map.class);
        for (SearchResult.Hit<Map, Void> hit : hits) {
            System.out.println(hit.index + "--" + hit.id);

        }

        jestClient.shutdownClient();
    }
}