0
点赞
收藏
分享

微信扫一扫

Lodash 真的死了吗?Lodash 5 在哪里?

窗外路过了谁 2023-11-04 阅读 55

本文使用DSL操作ES,SpringBoot操作ES
更多ElasticSearch入门到实战教程:点击查看

2.1 索引操作

ES索引是存储数据的容器,类似于数据库。

2.1.1 创建索引

1. DSL语法

PUT indexname
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name1":{
         "type": "text"
      },
      "name2":{
        "type": "integer"
      }
    }
  }
}
1. 参数说明:

settings:索引信息设置

  • 什么是分片?
  • 什么是副本?
  • 副本的作用如下:

mappings:索引映射定义

2. Java API

在第一章已经介绍过一些创建索引的代码了

    //从Spring容器获取client对象
    @Autowired
    private RestHighLevelClient client;

    public Boolean createIndex(String indexName) {
        //创建索引请求类,构造函数参数为索引名称
        CreateIndexRequest request = new CreateIndexRequest(indexName);
        //设置source映射字符串,直接把语句复制里面
        request.source(
                "{\n" +
                        "  \"settings\": {\n" +
                        "    \"number_of_shards\": 1,\n" +
                        "    \"number_of_replicas\": 1\n" +
                        "  },\n" +
                        "  \"mappings\": {\n" +
                        "    \"properties\": {\n" +
                        "      \"name1\":{\n" +
                        "         \"type\": \"text\"\n" +
                        "      },\n" +
                        "      \"name2\":{\n" +
                        "        \"type\": \"integer\"\n" +
                        "      }\n" +
                        "    }\n" +
                        "  }\n" +
                        "}",
                XContentType.JSON);
        try {
            //调用创建索引语法
            client.indices().create(request, RequestOptions.DEFAULT);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

注意这里调用的方法是source,不是mapping

2.1.2 删除索引

1. DSL语法

DELETE indexname

调用执行,以下返回结果为成功

{ - 
  "acknowledged": true
}

2. Java API

    //从Spring容器获取client对象
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/deleteIndex")
    public Boolean deleteIndex(String indexName) {
        //删除索引请求类,构造函数参数为索引名称
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);
        try {
            //调用删除索引语法
            client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

2.1.3 开启/关闭索引

什么是 Elasticsearch 打开/关闭索引?

1. 关闭索引

1. DSL语法
POST indexname/_close

调用执行,以下返回结果为成功

{ - 
  "acknowledged": true,
  "shards_acknowledged": true,
  "indices": { - 
    "indexname": { - 
      "closed": true
    }
  }
}
2. Java API
    @RequestMapping("/closeIndex")
    public Boolean closeIndex(String indexName) {
        CloseIndexRequest closeIndexRequest = new CloseIndexRequest(indexName);
        try {
            client.indices().close(closeIndexRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

2. 开启索引

1. DSL语法
POST indexname/_open

调用执行,以下返回结果为成功

{ - 
  "acknowledged": true,
  "shards_acknowledged": true
}
2. Java API
    @RequestMapping("/openIndex")
    public Boolean openIndex(String indexName) {
        OpenIndexRequest openIndexRequest = new OpenIndexRequest(indexName);
        try {
            client.indices().open(openIndexRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

2.1.4 索引别名

索引别名概述:

字段也有别名,使用率不太高,这里不过多讲解

1. 添加别名

创建索引别名,将别名indexname_alias与索引indexname关联

1. DSL语法
  1. 请求方式1
PUT indexname/_alias/indexname_alias
  1. 请求方式2
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "indexname",
        "alias": "indexname_alias"
      }
    }
  ]
}
2. Java API语法
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/addAlias")
    public Boolean addAlias(String indexName, String aliasName) {
        IndicesAliasesRequest indicesAliasesRequest = new IndicesAliasesRequest();
        IndicesAliasesRequest.AliasActions aliasActions = new IndicesAliasesRequest.AliasActions(IndicesAliasesRequest.AliasActions.Type.ADD);
        aliasActions.index(indexName).alias(aliasName);
        indicesAliasesRequest.addAliasAction(aliasActions);
        try {
            client.indices().updateAliases(indicesAliasesRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

接口接收两个参数,indexName:索引名,aliasName:要增加的别名

打开地址调用接口
http://localhost:8080/addAlias?indexName=indexname&aliasName=indexname_alias

2. 删除别名

删除索引别名:解除别名indexname_alias与索引indexname的关联

1. DSL语法
  1. 请求方式1
DELETE indexname/_alias/indexname_alias
  1. 请求方式2
POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "indexname",
        "alias": "indexname_alias"
      }
    }
  ]
}
2. Java API语法
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/removeAlias")
    public Boolean removeAlias(String indexName, String aliasName) {
        IndicesAliasesRequest indicesAliasesRequest = new IndicesAliasesRequest();
        IndicesAliasesRequest.AliasActions aliasActions = new IndicesAliasesRequest.AliasActions(IndicesAliasesRequest.AliasActions.Type.REMOVE);
        aliasActions.index(indexName).alias(aliasName);
        indicesAliasesRequest.addAliasAction(aliasActions);
        try {
            client.indices().updateAliases(indicesAliasesRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

和增加一样,接口接收两个参数,indexName:索引名,aliasName:要增加的别名

打开地址调用接口
http://localhost:8080/removeAlias?indexName=indexname&aliasName=indexname_alias

3. 切换别名

切换一个别名是在同一个API中执行添加、删除操作。这个操作是原子的,不用担心别名不指向索引的短时间。

请读者自行创建两个索引 indexname1indexname2,为了防止没必要的出错,请先给indexname2加上别名。

1. DSL语法
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "indexname1",
        "alias": "indexname_alias"
      }
    },
    {
      "remove": {
        "index": "indexname2",
        "alias": "indexname_alias"
      }
    }
  ]
}
2. Java API语法
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/removeAlias")
    public Boolean removeAlias(String indexName, String aliasName) {
        IndicesAliasesRequest indicesAliasesRequest = new IndicesAliasesRequest();
        IndicesAliasesRequest.AliasActions aliasActions = new IndicesAliasesRequest.AliasActions(IndicesAliasesRequest.AliasActions.Type.REMOVE);
        aliasActions.index(indexName).alias(aliasName);
        indicesAliasesRequest.addAliasAction(aliasActions);
        try {
            client.indices().updateAliases(indicesAliasesRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

打开地址调用接口
http://localhost:8080/changeAlias

4. 查看别名

1. DSL语法
  1. 通过别名查询索引
GET _alias/indexname_alias

根据返回结果所示,indexname 索引下有这个别名

{ - 
  "indexname": { - 
    "aliases": { - 
      "indexname_alias": { - 

      }
    }
  }
}
  1. 通过索引查询别名
GET indexname/_alias
  1. 查看别名是否存在索引中
GET indexname/_alias/indexname_alias
2. Java API语法
  1. 通过别名查询索引
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/selectIndexByAlias")
    public Map selectIndexByAlias(String aliasName) {
        GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliasName);
        // 指定查看某一个索引的别名 不指定,则会搜索所有的别名
        getAliasesRequest.indices();
        try {
            GetAliasesResponse response = client.indices().getAlias(getAliasesRequest,RequestOptions.DEFAULT);
            Map<String, Set<AliasMetadata>> aliases;
            aliases = response.getAliases();
            return aliases;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

打开地址调用接口,页面出现返回结果
http://localhost:8080/selectIndexByAlias?aliasName=indexname_alias

  1. 通过索引查询别名
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/selectIndexByAlias")
    public Map selectIndexByAlias(String aliasName) {
        GetAliasesRequest getAliasesRequest = new GetAliasesRequest();
        // 指定查看某一个索引的别名 不指定,则会搜索所有的别名
        getAliasesRequest.indices(indexName);
        try {
            GetAliasesResponse response = client.indices().getAlias(getAliasesRequest,RequestOptions.DEFAULT);
            Map<String, Set<AliasMetadata>> aliases;
            aliases = response.getAliases();
            return aliases;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

打开地址调用接口,页面出现返回结果
http://localhost:8080/selectAliasByIndex?aliasName=indexname1

  1. 查看别名是否存在索引中
    @Autowired
    private RestHighLevelClient client;

    @RequestMapping("/getAliasExist")
    public Boolean getAliasExist(String indexName,String aliasName) {
        GetAliasesRequest getAliasesRequest = new GetAliasesRequest(aliasName);
        // 指定查看某一个索引的别名 不指定,则会搜索所有的别名
        getAliasesRequest.indices(indexName);
        try {
            return client.indices().existsAlias(getAliasesRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

打开地址调用接口,页面出现返回结果
http://localhost:8080/getAliasExist?indexName=indexname&aliasName=indexname_alias

更多资料请看《ElasticSearch入门到实战教程》:点击查看

举报

相关推荐

0 条评论