搜索本产品文档关键词
High Level REST Client
所有文档
menu
没有找到结果,请重新输入

Elasticsearch BES

High Level REST Client

本文基于Java High Level REST Client 7.x版本,为您介绍Elasticsearch Java API的用法。

准备工作

  • 安装Java,要求JDK版本为1.8及以上。
  • 创建Baidu Elasticsearch实例,版本7.4.2。

    注意 High Level Client能够向上兼容,但为了保证最大程度地使用最新版客户端的特性,推荐High Level Client版本与集群版本一致。

  • 创建Java Maven工程,并将如下的pom依赖添加到Java工程的pom.xml文件中。

pom依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.4.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>

示例

以下代码为使用Create Index API创建索引,使用异步调用的方式写入文档,删除文档,使用Delete API删除该索引等操作的示例,可供参考。

import java.io.IOException;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;

public class RestClientTest742 {

    public static void main(String[] args) {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //访问用户名和密码为您创建Elasticsearch实例时设置的用户名和密码。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{访问用户名}", "{访问密码}"));
        // 通过builder创建rest client,配置http client的HttpClientConfigCallback。
        // ES HTTP URL 在Baidu Elasticsearch界面中可以查询
        RestClientBuilder builder = RestClient.builder(new HttpHost("{ES HTTP URL}", 8200))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // RestHighLevelClient实例通过REST low-level client builder进行构造。
        RestHighLevelClient client = new RestHighLevelClient(builder);

        try {
            //创建索引
            CreateIndexRequest createRequest = new CreateIndexRequest("my_index");

            //创建的每个索引都可以有与之关联的特定设置。
            createRequest.settings(Settings.builder()
                    .put("index.number_of_shards", 3)
                    .put("index.number_of_replicas", 1)
                    .put("index. refresh_interval", "10s")
            );
            // 创建索引时创建文档类型映射
            createRequest.mapping("{\n" +
                            "    \"message\": {\n" +
                            "      \"properties\": {\n" +
                            "        \"message\": {\n" +
                            "          \"type\": \"text\"\n" +
                            "        }\n" +
                            "      }\n" +
                            "    }\n" +
                            "  }",
                    XContentType.JSON);
            // 同步执行创建索引操作
            CreateIndexResponse createIndexResponse = client.indices().create(createRequest, RequestOptions.DEFAULT);
            System.out.println("create index successfully! response : " + createIndexResponse.toString());

            // 写入文档
            // 以XContentBuilder对象的形式提供,Elasticsearch 内部会帮我们生成JSON内容
            XContentBuilder jsonBuilder = XContentFactory.jsonBuilder();
            jsonBuilder.startObject();
            {
                jsonBuilder.field("user", "Kobe Bryant");
                jsonBuilder.field("number", 24);
                jsonBuilder.field("message", "One of the greatest basketball players since the 21st century");
            }
            jsonBuilder.endObject();
            IndexRequest indexRequest = new IndexRequest("my_index").id("1").source(jsonBuilder);
            //异步执行写入文档操作,方法不会阻塞并立即返回。
            ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() {
                @Override
                public void onResponse(IndexResponse indexResponse) {
                    //执行成功时调用。 Response以参数方式提供
                    System.out.println("Index doc successfully! response : " + indexResponse.toString());
                }

                @Override
                public void onFailure(Exception e) {
                    //在失败的情况下调用。 引发的异常以参数方式提供
                    System.out.println("Index doc fail!");
                    e.printStackTrace();
                }
            };
            //异步执行索引请求需要将IndexRequest实例和ActionListener实例传递给异步方法:
            client.indexAsync(indexRequest, RequestOptions.DEFAULT, listener);

            // 删除文档
            DeleteRequest deleteRequest = new DeleteRequest("my_index").id("1");
            // 执行删除文档操作
            DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
            System.out.println("Delete doc successfully! \n" + deleteResponse.toString() + "\n" + deleteResponse.status());

            // 指定要删除的索引名称
            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("my_index");
            // 执行删除索引操作
            AcknowledgedResponse deleteIndexResponse = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
            System.out.println("delete index successfully! response : " + deleteIndexResponse.toString());
        } catch (IOException ioException) {
            // 异常处理。
            ioException.printStackTrace();
        } finally {
            // 在不需要使用client后,将client关闭。
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

以上示例代码中带{}的参数需要替换为您具体业务的参数,详情请参见代码注释。

更多Java High Level REST Client的使用特性,请参见Java High Level REST Client官方文档

上一篇
Java REST Client
下一篇
Low Level REST Client