java api 实现es中的索引管理

这篇具有很好参考价值的文章主要介绍了java api 实现es中的索引管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

获取连接的配置类

创建索引并且为创建的索引设置一些映射配置

删索引库

删除索引中的文档

判断索引是否存在


获取连接的配置类

具体的测试环境的搭建可以参考我的上一篇博客:通过java代码实现ES中的常用搜索_未来很长,别只看眼前的博客-CSDN博客

@Configuration
public class ElasticSearchConfig {

    @Value("${eslearn.elasticsearch.hostlist}")
    private String hostList;

    @Bean(destroyMethod = "close") //表示连接使用完成后需要关闭
    public RestHighLevelClient restHighLevelClient(){
        String[] split = hostList.split(",");
        //这种写法是考虑到可能会配置多个es节点
        HttpHost[] httpHosts = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String item = split[i];
            httpHosts[i] = new HttpHost(item.split(":")[0],Integer.parseInt(item.split(":")[1]),"http");
        }

        return new RestHighLevelClient(RestClient.builder(httpHosts));
    }

}

创建索引并且为创建的索引设置一些映射配置

    //创建索引 并且为创建的索引设置一些映射配置
    @Test
    public void testCreateIndex() throws IOException {
        //创建索引对象
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("test_createindex");
        //设置参数
        createIndexRequest.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
        //指定映射方式1 在kibana中测试一遍直接复制过来就行  不过不知道为啥一直报错:Failed to parse content to map 最后还是选择使用java来进行处理了
//        createIndexRequest.mapping(" {\n" +
//                " \t\"properties\": {\n" +
//                "            \"name\":{\n" +
//                "             \"type\":\"keyword\"\n" +
//                "           },\n" +
//                "           \"description\": {\n" +
//                "              \"type\": \"text\"\n" +
//                "           },\n" +
//                "            \"price\":{\n" +
//                "             \"type\":\"long\"\n" +
//                "           },\n" +
//                " \t}\n" +
//                "}", XContentType.JSON);

        //指定映射方式2  索引名称必须小写  这个测试成功了 但是只有一个字段 如果想要多个字段呢?
        Map<String, Object> message = new HashMap<>();
        message.put("type", "text");

        Map<String, Object> name = new HashMap<>();
        name.put("type", "keyword"); //为字段声明映射的数据类型

        //把声明好的字段塞到配置中
        Map<String, Object> properties = new HashMap<>();
        properties.put("message", message);
        properties.put("name",name);

        //把配置塞到映射中
        Map<String, Object> mapping = new HashMap<>();
        mapping.put("properties", properties);
        createIndexRequest.mapping(mapping);


        //设置别名
        createIndexRequest.alias(new Alias("create_index_test"));

        // 额外参数
        //设置超时时间
        createIndexRequest.setTimeout(TimeValue.timeValueMinutes(2));
        //设置主节点超时时间
        createIndexRequest.setMasterTimeout(TimeValue.timeValueMinutes(1));
        //在创建索引API返回响应之前等待的活动分片副本的数量,以int形式表示
        createIndexRequest.waitForActiveShards(ActiveShardCount.from(2));
        createIndexRequest.waitForActiveShards(ActiveShardCount.DEFAULT);


        //操作索引的客户端
        IndicesClient indices = client.indices();
        //执行创建索引库
        CreateIndexResponse response = indices.create(createIndexRequest, RequestOptions.DEFAULT);


    }

删索引库

    //删除索引库
    @Test
    public void testDeleteIndex() throws IOException {
        //判断索引是否存在
        GetIndexRequest getIndexRequest = new GetIndexRequest("test_createindex");
        boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        if (exists){
            //删除索引对象
            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test_createindex");
            //操作索引的客户端
            IndicesClient indices = client.indices();
            //执行删除索引
            AcknowledgedResponse delete = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
            //得到响应
            boolean acknowledged = delete.isAcknowledged();
            System.out.println(acknowledged);
        }

    }

删除索引中的文档

/**
     * 删除es中指定的数据
     * @param ids 文档的id标识集合
     */
public void deleteIndexDoc(List<String> ids){
    if(ids.size()>0){
        BulkRequest request = new BulkRequest();
        //删除
        for(String id:ids){
            request.timeout(TimeValue.timeValueMinutes(5)).add(new DeleteRequest("test_createindex",id));
        }
        try {
            client.bulk(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //可以执行一下释放资源的操作
        }
    }
}

java api 实现es中的索引管理文章来源地址https://www.toymoban.com/news/detail-507101.html

判断索引是否存在

    // 判断索引是否存在 可以用来初始化搜索的时候用 如果没有索引那就创建索引
    @Test
    public void testExistIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("test_createindex");
//        request.local(false);//从主节点返回本地信息或检索状态
//        request.humanReadable(true);//以适合人类的格式返回结果
//        request.includeDefaults(false);//是否返回每个索引的所有默认设置
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
}

到了这里,关于java api 实现es中的索引管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文件管理---索引文件结构、位示图、树形目录结构

    操作系统中对软件的管理就是对文件的管理(基本单位) 逻辑结构:主要是概念当中的一些结构层次,主要有流式文件和记录式文件; 物理结构: 顺序文件结构:按照文件的逻辑顺序存储到物理结构当中,相当于给文件分配一个连续的存储空间,逻辑上是什么形式,物理上

    2024年01月19日
    浏览(35)
  • ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建、删除、是否存在、关闭、开启

    注意:导入的包区别,不同的包创建索引的方式不同。博主亲身实践,具体体现在createIndexRequest.mapping()里面。读者可自行试验。  由此可以猜想一下: 可以看到上述两种方式导入的包的子类名是相同的,但是具体对索引的操作方式可能是不同的。具体的区别博主暂时还不清

    2024年02月16日
    浏览(58)
  • ES之API系列--index template(索引模板)的用法(有实例)

    原文网址:ES之API系列--index template(索引模板)的用法(有实例)_IT利刃出鞘的博客-CSDN博客 说明 本文介绍ElasticSearch的index template(索引模板)的用法(有实例)。 官网网址 https://www.elastic.co/guide/en/elasticsearch/reference/8.0/index-templates.html 作用概述         在 新建 索引时,如果索引名

    2024年04月09日
    浏览(41)
  • ES索引管理

    https://elasticstack.blog.csdn.net/article/details/102728987 1.1 rollover命令 POST /log_alias/_rollover {     \\\"conditions\\\":{         \\\"max_age\\\":\\\"7d\\\",         \\\"max_docs\\\":1400,         \\\"max_size\\\":\\\"5gb\\\"     } } 显示的结果是: {   \\\"acknowledged\\\" : true,   \\\"shards_acknowledged\\\" : true,   \\\"old_index\\\" : \\\"logs-2019.10.21

    2024年02月02日
    浏览(27)
  • es的索引管理

    (1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。 (2)节点(Node): 形成集群的每个服务器称为节点。 索引(index): 在 ES 中, 索引是一组文

    2024年02月11日
    浏览(28)
  • ES-索引管理

    数据类型 ​ 搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储

    2024年02月10日
    浏览(28)
  • ES es Elasticsearch 十三 Java api 实现搜索 分页查询 复杂查询 过滤查询 ids查询 等

    目录 Java api 实现搜索 Pom.xml 建立链接 搜索全部记录 增加规则值查某些字段 搜索分页 全代码 Ids 搜索 搜索Match搜索 multi_match 搜索 多字段搜索 复杂查询 bool查询 filter  bool 复杂查询增加过滤器查询 复杂擦好像加排序 日志 思路 参考 api 写法 写Java代码 请求条件构建层次

    2024年02月04日
    浏览(60)
  • 【ES实战】索引生命周期管理(二)

    一旦策略进入热、暖或冷阶段,就设置索引的优先级。在节点重启后,优先级较高的索引会在优先级较低的索引之前被恢复。 一般来说,热阶段的索引应该有最高值,冷阶段的索引应该有最低值。例如:HOT阶段为100,Warm阶段为50,cold阶段为0。没有设置这个值的索引,其默认

    2024年02月10日
    浏览(46)
  • 简单介绍ES中的索引存储类型

    老铁们好,我是V,今天我们简单聊聊ES中的索引存储类型 目前ES中主要支持以下几种存储类型 fs 默认文件系统实现。这将根据操作环境选择最佳实施,目前会默认启用hybridfs simplefs Simple FS 类型是 SimpleFsDirectory 使用随机访问文件的文件系统存储(映射到 Lucene)的直接实现。这

    2024年04月28日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包