前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8、使用Java High Level REST Client操作elasticsearch

8、使用Java High Level REST Client操作elasticsearch

作者头像
BUG弄潮儿
发布2020-06-12 16:19:46
2K0
发布2020-06-12 16:19:46
举报
文章被收录于专栏:JAVA乐园JAVA乐园

阅读文本大概需要3分钟。

1、Java High Level REST Client说明

Java High Level REST Client从6.0.0开始加入的,目的是以java面向对象的方式来进行请求、响应处理。每个API支持同步/异步两种方式,同步方法直接返回一个结果对象。异步的方法以async为后缀,通过listener参数来通知结果。高级java REST 客户端依赖Elasticsearch core project

兼容性说明:依赖 java1.8 和 Elasticsearch core project,请使用与服务端ES版本一致的客户端版本。

2、Elasticsearch服务搭建

文章中使用Elasticsearch的6.5.4版本,该版本在windows启动时会出现以下异常

代码语言:javascript
复制
[2019-06-30T12:12:58,471][INFO][o.e.p.PluginsService     ] [JP55XpU] noplugins loaded
[2019-06-30T12:13:09,651][INFO][o.e.x.s.a.s.FileRolesStore] [JP55XpU] parsed [0] roles from file[D:\devtools\elasticsearch-6.5.4\config\roles.yml]
[2019-06-30T12:13:10,844][ERROR][o.e.b.Bootstrap          ] [JP55XpU] Exception
org.elasticsearch.ElasticsearchException:X-Pack is not supported and Machine Learning is not available for [windows-x86];you can use the other X-Pack features (unsupported) by settingxpack.ml.enabled: false in elasticsearch.yml
      atorg.elasticsearch.xpack.ml.MachineLearningFeatureSet.isRunningOnMlPlatform(MachineLearningFeatureSet.java:104)~[?:?]
      atorg.elasticsearch.xpack.ml.MachineLearningFeatureSet.isRunningOnMlPlatform(MachineLearningFeatureSet.java:95)~[?:?]

关于该异常可以参考如下这两篇文章的其中的任何一种解决方案

将jdk与jre安装成64位:

代码语言:javascript
复制
https://www.cnblogs.com/alvin-niu/p/9747361.html

关闭X-Pack支持:

代码语言:javascript
复制
https://blog.csdn.net/fanrenxiang/article/details/81358332

3、Maven集成Java High LevelREST Client

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.5.4</version>
    </dependency>

<dependency>

      <groupId>org.apache.logging.log4j</groupId>

      <artifactId>log4j-core</artifactId>

      <version>2.12.0</version>

   </dependency>

</dependencies>

4、Java High Level REST Client 初始化

代码语言:javascript
复制
public static RestHighLevelClient getClient(){

    RestHighLevelClient client = new RestHighLevelClient(

            RestClient.builder(

                    new HttpHost("localhost", 9200, "http")));

    return client;

}

可以给定集群的多个节点地址,构建RestHighLevelClient对象

代码语言:javascript
复制
public static RestHighLevelClient getClient(){

    RestHighLevelClient client = new RestHighLevelClient(

            RestClient.builder(

                    new HttpHost("localhost", 9200, "http"),

                    new HttpHost("localhost", 9100, "http")));

    return client;

}

Client 不再使用了,记得关闭它:

代码语言:javascript
复制
client.close();

API及用法示例,可以参考官网API:

代码语言:javascript
复制
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html

5、Create Index(创建索引)

同步方式创建Index

代码语言:javascript
复制
public static void createIndexSync(){

    RestHighLevelClient client=null;

    try{

        client = getClient();

        // 1、创建 创建索引request 参数:索引名java

        CreateIndexRequest request = new CreateIndexRequest("java");



        // 2、设置索引的settings

        request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数

                .put("index.number_of_replicas", 2) // 副本数



        );



        // 3、设置索引的mappings

        request.mapping("_doc",

                "  {\n" +

                        "    \"_doc\": {\n" +

                        "      \"properties\": {\n" +

                        "        \"message\": {\n" +

                        "          \"type\": \"text\"\n" +

                        "        }\n" +

                        "      }\n" +

                        "    }\n" +

                        "  }",

                XContentType.JSON);



        // 4、 设置索引的别名

        request.alias(new Alias("it"));



        RequestOptions requestOptions = RequestOptions.DEFAULT;

        // 5、 发送请求

        // 5.1 同步方式发送请求

        CreateIndexResponse createIndexResponse = client.indices().create(request,requestOptions);



        // 6、处理响应

        boolean acknowledged = createIndexResponse.isAcknowledged();

        boolean shardsAcknowledged = createIndexResponse

                .isShardsAcknowledged();

        System.out.println("acknowledged = " + acknowledged);

        System.out.println("shardsAcknowledged = " + shardsAcknowledged);



    } catch (Exception e) {

        e.printStackTrace();

    }finally {

        try{

            client.close();

        } catch (Exception e) {

        }

    }

}

异步方式创建Index:

代码语言:javascript
复制
public static void createIndexAsync(){

    RestHighLevelClient client=null;

    try{

        client = getClient();

        // 1、创建 创建索引request 参数:索引名java

        CreateIndexRequest request = new CreateIndexRequest("python");



        // 2、设置索引的settings

        request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数

                .put("index.number_of_replicas", 2) // 副本数



        );



        // 3、设置索引的mappings

        request.mapping("_doc",

                "  {\n" +

                        "    \"_doc\": {\n" +

                        "      \"properties\": {\n" +

                        "        \"message\": {\n" +

                        "          \"type\": \"text\"\n" +

                        "        }\n" +

                        "      }\n" +

                        "    }\n" +

                        "  }",

                XContentType.JSON);



        // 4、 设置索引的别名

        request.alias(new Alias("py"));



        RequestOptions requestOptions = RequestOptions.DEFAULT;

        // 5、 发送请求



        // 5.1 异步方式发送请求

        ActionListener<CreateIndexResponse> listener = new ActionListener<CreateIndexResponse>() {



            public void onResponse(

                    CreateIndexResponse createIndexResponse) {

                // 6、处理响应

                boolean acknowledged = createIndexResponse.isAcknowledged();

                boolean shardsAcknowledged = createIndexResponse

                        .isShardsAcknowledged();

                System.out.println("acknowledged = " + acknowledged);

                System.out.println(

                        "shardsAcknowledged = " + shardsAcknowledged);

            }



            public void onFailure(Exception e) {

                System.out.println("创建索引异常:" + e.getMessage());

            }

        };

        client.indices().createAsync(request, RequestOptions.DEFAULT, listener);



    } catch (Exception e) {

        e.printStackTrace();

    }finally {

        try{

            client.close();

        } catch (Exception e) {

        }

    }

}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档