本文档为您介绍使用Java High Level REST Client调用Elasticsearch Document API的方法,提供了连接阿里云Elasticsearch集群、创建索引、创建文档、获取文档、更新文档等操作的示例代码供您参考。

前提条件

  • 安装JDK并配置Java环境变量。

    本案例使用的是jdk1.8.0_211(其他版本不保证兼容),可单击此处在官网上下载。

  • 准备一个Java程序开发工具。

    本案例使用的开发工具是eclipse,您也可以使用其他工具。

背景信息

本文档提供的示例代码是基于Java High Level REST Client 6.3.x版本的,其他版本不保证兼容。

操作步骤

  1. 创建一个Maven项目。

    本案例的项目配置如下。


  2. 配置pom.xml文件,添加如下的dependency依赖。


    <dependency>
         <groupId>org.elasticsearch.client</groupId>
         <artifactId>elasticsearch-rest-high-level-client</artifactId>
         <version>6.3.2</version>
    </dependency>
  3. 创建一个Package,并在此Package下创建所需的Java文件。
    本案例的Package配置如下。

    本案例的Java文件配置如下。

    配置完成后,项目的目录如下。

    • IndexAPI_use.java:创建索引和文档。
    • UpdateAPI_use.java:更新文档。
    • GetAPI_use.java:获取文档。
    • DeleteAPI_use.java:删除文档。
    说明 您也可以根据实际需求创建其他Java文件,本案例仅供参考。
  4. IndexAPI_use.java文件中,参考如下示例代码,连接您的阿里云Elasticsearch集群,并使用Java IndexRequest API创建索引。
    部分示例代码如下:
    //连接Elasticsearch集群
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    
            credentialsProvider.setCredentials(AuthScope.ANY,
                    new UsernamePasswordCredentials("elastic", "替换为密码"));
    
    
            RestClientBuilder builder = RestClient.builder(new HttpHost("替换为ES实例ID.public.elasticsearch.aliyuncs.com", 9200))
                    .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
    
                        public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                            return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                        }
                    });
    //使用Java IndexRequest API创建索引
    RestHighLevelClient client = new RestHighLevelClient(builder);
            try {
                IndexRequest request = new IndexRequest();
                request.index("apitest_index");
                request.type("apitest_type");
                request.id("1");
                Map<String, Object> source = new HashMap<>();
                source.put("user", "kimchy");
                source.put("post_date", new Date());
                source.put("message", "trying out Elasticsearch");
                request.source(source);
                try {
                    IndexResponse result = client.index(request);
                    System.out.println(result);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                client.close();
            }
    可单击此处下载完整的示例代码,最终打印结果如下。
    IndexResponse
    [
    index=apitest_index,
    type=apitest_type,
    id=1,
    version=1,
    result=created,
    seqNo=0,
    primaryTerm=1,
    shards={"total":2,"successful":1,"failed":0}
    ]
  5. UpdateAPI_use.java文件中,参考如下示例代码,使用Java UpdateRequest API更新文档。
    部分示例代码如下。
    RestHighLevelClient client = new RestHighLevelClient(builder);
         try {
    
                UpdateRequest updateRequest = new UpdateRequest("apitest_index", "apitest_type", "1");
                IndexRequest indexRequest = new IndexRequest("apitest_index", "apitest_type", "1");
                Map<String, String> source = new HashMap<>();
                source.put("user", "dingw2");
                indexRequest.source(source);
                updateRequest.doc(indexRequest);
                UpdateResponse result = client.update(updateRequest);
                System.out.println(result);
    
            }catch (IOException e) {
                    e.printStackTrace();
            } finally {
                client.close();
            }
    可单击此处下载完整的示例代码,最终打印结果如下。
    UpdateResponse
    [
    index=apitest_index,
    type=apitest_type,
    id=1,
    version=2,
    seqNo=1,
    primaryTerm=1,
    result=updated,
    shards=ShardInfo{
        total=2,
        successful=2,
        failures=[]
      }
    ]
  6. GetAPI_use.java文件中,参考如下示例代码,使用Java GetRequest API获取文档。
    部分示例代码如下。
    RestHighLevelClient client = new RestHighLevelClient(builder);
         try {
                GetRequest request = new GetRequest("apitest_index", "apitest_type", "1");
                GetResponse result = client.get(request);
                System.out.println(result);
    
            }catch (IOException e) {
                    e.printStackTrace();
            } finally {
                client.close();
            }
    可单击此处下载完整的示例代码,最终打印结果如下。
    {
        "_index": "apitest_index",
        "_type": "apitest_type",
        "_id": "1",
        "_version": 2,
        "found": true,
        "_source": {
            "post_date": "2019-06-10T05:50:52.752Z",
            "message": "trying out Elasticsearch",
            "user": "dingw2"
        }
    }
  7. DeleteAPI_use.java文件中,参考如下示例代码,使用Java DeleteRequest API删除文档。
    部分示例代码如下。
    RestHighLevelClient client = new RestHighLevelClient(builder);
         try {
                DeleteRequest request = new DeleteRequest("apitest_index", "apitest_type", "1");
                DeleteResponse result = client.delete(request);
                System.out.println(result);
            } catch(Throwable e) {
                e.printStackTrace();
            } finally {
                client.close();
            }
    可单击此处下载完整的示例代码,最终打印结果如下。
    DeleteResponse
    [
    index=apitest_index,
    type=apitest_type,
    id=1,
    version=3,
    result=deleted,
    shards=ShardInfo{
        total=2,
        successful=2,
        failures=[]
      }
    ]

后续步骤

根据您的实际需求,调用其他Document API完成相关操作,其他API的使用示例请参考Elasticsearch官方文档