Elasticsearch: java客户端之AdminClient

简介: Elasticsearch: java客户端之AdminClient

 Elasticsearch版本

    • elasticsearch-5.4.3.jar

    指定 ip地址创建client

    private TransportClient client = null;
        /**
         *指定 ip地址创建client
         */
        @Before
        public void init() throws Exception {
            //设置集群名称
            Settings settings = Settings.builder().put("cluster.name", "my-es").build();
            //创建client
            client = new PreBuiltTransportClient(settings).addTransportAddresses(
                    new InetSocketTransportAddress(InetAddress.getByName("192.168.100.211"), 9300),
                    new InetSocketTransportAddress(InetAddress.getByName("192.168.100.212"), 9300),
                    new InetSocketTransportAddress(InetAddress.getByName("192.168.100.213"), 9300));
        }

    image.gif

    创建索引,并配置一些分区和副本的数量

    /**
         * 创建索引,并配置一些分区和副本的数量
         */
        @Test
        public void createIndexWithSettings() {
            //获取Admin的API
            AdminClient admin = client.admin();
            //使用Admin API对索引进行操作
            IndicesAdminClient indices = admin.indices();
            //准备创建索引
            indices.prepareCreate("gamelog")
                    //配置索引参数
                    .setSettings(
                            //参数配置器
                            Settings.builder()//指定索引分区的数量
                            .put("index.number_of_shards", 4)
                                    //指定索引副本的数量(注意:不包括本身,如果设置数据存储副本为2,实际上数据存储了3份)
                            .put("index.number_of_replicas", 2)
                    )
                    //真正执行
                    .get();
        }

    image.gif

    给索引添加mapping信息

    /**
         * 给索引添加mapping信息(类似给表添加schema信息)
         */
        @Test
        public void putMapping() {
            //创建索引
            client.admin().indices().prepareCreate("twitter")
                    //创建一个type,并指定type中属性的名字和类型
                    .addMapping("tweet",
                            "{\n" +
                                    "    \"tweet\": {\n" +
                                    "      \"properties\": {\n" +
                                    "        \"message\": {\n" +
                                    "          \"type\": \"string\"\n" +
                                    "        }\n" +
                                    "      }\n" +
                                    "    }\n" +
                                    "  }")
                    .get();
        }

    image.gif

    设置字段索引,分词,是否存储

    /**
         * 设置字段索引,分词,是否存储
         */
        @Test
        public void testSettingsMappings() throws IOException {
            //1:settings
            HashMap<String, Object> settings_map = new HashMap<String, Object>(2);
            //指定索引分区的数量
            settings_map.put("number_of_shards", 3);
            //指定索引副本的数量
            settings_map.put("number_of_replicas", 2);
            //2:mappings(映射、schema)
            XContentBuilder builder = XContentFactory.jsonBuilder()
                    .startObject()
                    /**
                     *
                     * 你可以通过dynamic设置来控制这一行为,它能够接受以下的选项:
                     * true:默认值。动态添加字段
                     * false:忽略新字段
                     * strict:如果碰到陌生字段,抛出异常
                     */
                        .field("dynamic", "true")
                        //设置type中的属性
                    .startObject("properties")
                            //id属性
                            .startObject("num")
                                //类型是integer
                                .field("type", "integer")
                                //不分词,但是建索引
                                /**
                                 * index这个属性,no代表不建索引
                                 * not_analyzed,建索引不分词
                                 * analyzed 即分词,又建立索引
                                 * expected [no], [not_analyzed] or [analyzed]
                                 */
                                .field("index", "not_analyzed")
                                //在文档中存储
                                .field("store", "yes")
                            .endObject()
                            //name属性
                            .startObject("name")
                                //string类型
                                .field("type", "string")
                                //在文档中存储
                                .field("store", "yes")
                                //建立索引
                                .field("index", "analyzed")
                                //使用ik_smart进行分词
                                .field("analyzer", "ik_smart")
                            .endObject()
                        .endObject()
                    .endObject();
            CreateIndexRequestBuilder prepareCreate = client.admin().indices().prepareCreate("user_info");
            //管理索引(user_info)然后关联type(user)
            prepareCreate.setSettings(settings_map).addMapping("user", builder).get();
        }

    image.gif


    相关实践学习
    以电商场景为例搭建AI语义搜索应用
    本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
    ElasticSearch 最新快速入门教程
    本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
    相关文章
    |
    存储 自然语言处理 Java
    Elasticsearch: java客户端之AdminClient
    Elasticsearch: java客户端之AdminClient
    |
    10月前
    |
    JSON 网络协议 安全
    【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
    几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
    439 1
    |
    10月前
    |
    JSON 网络协议 安全
    【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
    几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
    409 1
    |
    11月前
    |
    数据采集 存储 弹性计算
    高并发Java爬虫的瓶颈分析与动态线程优化方案
    高并发Java爬虫的瓶颈分析与动态线程优化方案
    Java 数据库 Spring
    459 0
    |
    11月前
    |
    算法 Java
    Java多线程编程:实现线程间数据共享机制
    以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
    630 16
    |
    12月前
    |
    缓存 并行计算 安全
    关于Java多线程详解
    本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
    |
    数据采集 存储 前端开发
    Java爬虫性能优化:多线程抓取JSP动态数据实践
    Java爬虫性能优化:多线程抓取JSP动态数据实践
    |
    Java API 调度
    从阻塞到畅通:Java虚拟线程开启并发新纪元
    从阻塞到畅通:Java虚拟线程开启并发新纪元
    537 83
    |
    安全 算法 Java
    Java 多线程:线程安全与同步控制的深度解析
    本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
    492 0