elasticsearch必知必会的干货知识二:es索引操作技巧(代码片段)

zuowj zuowj     2022-12-08     761

关键词:

该系列上一篇文章《Elasticsearch必知必会的干货知识一:ES索引文档的CRUD》 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建、更改、迁移、查询配置信息等。

  1. 仅创建索引:PUT index

    PUT /index
    
  2. 添加字段设置(mappings):PUT index/_mapping/type,如:(properties下均为索引字段)

    PUT /index/_mapping/_doc 
    
    
      "properties": 
        "email": 
          "type": "keyword"
        
      
    
    
  3. 添加索引设置(settings):PUT /index/_settings,如:

    PUT /index/_settings
    
    
        "number_of_shards":"8",
        "max_inner_result_window":"130000",
        "max_result_window":"130000",
        "analysis":
            "analyzer":
                "ngram_analyzer":
                    "tokenizer":"ngram_tokenizer"
                
            ,
            "tokenizer":
                "ngram_tokenizer":
                    "token_chars":[
                        "letter",
                        "digit",
                        "punctuation"
                    ],
                    "type":"ngram",
                    "max_gram":"1"
                
            
        
    
    
  4. 添加别名或删除别名:POST /_aliases 或 PUT /index/_alias/name ,如:(remove表示删除别名,add表示添加别名)

POST  /_aliases

    "actions" : [
         "remove" :  "index" : "test1", "alias" : "alias1"  ,
         "add" :  "index" : "test2", "alias" : "alias1"  
    ]


PUT /index/_alias/name   exp:/index/_alias/index100 

  1. 一次性创建包含完整的别名(alias)、字段(mappings)、设置(settings)的索引,如:

    PUT /index_name
    
        "index_name":
            "aliases":
                "index_alias_name":
    
                
            ,
            "mappings":
                "index_type":
                    "dynamic":"false",
                    "properties":
                        "doubleField1":
                            "type":"double",
                            "null_value":0
                        ,
                        "keywordField2":
                            "type":"keyword",
                            "null_value":""
                        ,
                        "longField3":
                            "type":"long",
                            "null_value":0
                        ,
                        "textField4":
                            "type":"text",
                            "fields":
                                "raw":
                                    "type":"keyword",
                                    "null_value":""
                                
                            ,
                            "analyzer":"ngram_analyzer"
                        ,
                        "dateField5":
                            "type":"date",
                            "null_value":"-62167420800000",
                            "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                        
                    
                
            ,
            "settings":
                "number_of_shards":"3",
                "number_of_replicas":"2",
                "max_inner_result_window":"130000",
                "max_result_window":"130000",
                "analysis":
                    "analyzer":
                        "ngram_analyzer":
                            "tokenizer":"ngram_tokenizer"
                        
                    ,
                    "tokenizer":
                        "ngram_tokenizer":
                            "token_chars":[
                                "letter",
                                "digit",
                                "punctuation"
                            ],
                            "type":"ngram",
                            "max_gram":"1"
                        
                    
                
            
        
    
    
  2. index自动滚动【Rollover】,即:当索引达到预设的滚动条件时,会自动创建新的索引(index),并将别名(alias)指向最新的索引,原索引将被自动删除映射,如:(先创建索引并指名索引别名,然后执行_rollover API 且设定滚动的条件值,最后正常的插入文档数,当达到滚动条件后,则会自动触发index _rollover)

    POST index_alias_name/_rollover/
    
      "conditions": 
        "max_age": "7d", //设置:最大时间7天
        "max_docs": 10000,//设置:最大文档记录数
        "max_size":  "5gb" //设置:索引最大容量
      
    
    
    //Response:
    
      "old_index": "旧索引名",
      "new_index": "新索引名",
      "rolled_over": true,
      "dry_run": false,
      "acknowledged": true,
      "shards_acknowledged": true,
      "conditions": 
        "[max_docs: 10000]": true,
        "[max_age: 7d]": false,
        "[max_size: 5gb]": false
      
    
    
    //POST index_alias_name/_doc -d index文档JSON  插入10000以上的文档记录
    
  3. 重建索引(_reindex),即:一旦索引被创建,则无法直接修改索引字段的mapping属性,必需要重建索引然后将旧的索引数据迁移到新的索引中才行(迁移过程底层使用了scroll API ),如:

    POST _reindex
    
      "conflicts": "proceed",//发生冲突继续执行
      "source": 
        "index": "old_index",
        "type": "_doc",
        "size": 5000,  //设置每批迁移的文档记录数
        "_source": ["user", "_doc"], //可设置要迁移的索引字段,不设置则默认所有字段
        "query":  //可设置要迁移的文档记录过滤条件
          "match_all":  
        
      ,
      "dest": 
        "index": "new_index",
        "type": "_doc",
        "version_type": "internal" //"internal"或者不设置,则Elasticsearch强制性的将文档转储到目标中,覆盖具有相同类型和ID的任何内容
      
    
    

    其它说明可参见:ES数据库重建索引——Reindex(数据迁移)

  4. 查询index的完整定义信息:GET /index ,如:

    GET /index
    
  5. 只查询mapping字段信息:GET /index/_mapping (带s也可以)

    GET /index/_mapping OR /index/_mappings 
    OR /index/_mapping/_doc【如有多个type可以加上指定type】
    
  6. 只查询settings信息:GET /index/_settings

    GET /index/_settings
    

zookeeper必知必会的知识点

ZooKeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接... 查看详情

flink必知必会的重要基本知识

一、Flink基本知识1.1、Flink介绍ApacheFlink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink官网:https://flink.apache.org/Flink的中文官网:https://flink.apache.org/zh/1.2、有界与无界1.2.1、有界数据... 查看详情

flink必知必会的重要基本知识

一、Flink基本知识1.1、Flink介绍ApacheFlink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink官网:https://flink.apache.org/Flink的中文官网:https://flink.apache.org/zh/1.2、有界与无界1.2.1、有界数据... 查看详情

❤️hadoop必知必会的基本知识❤️

🏃‍HDFS🏊‍HDFS的组成架构:这种架构主要由四个部分组成,分别为HDFSClient、NameNode、DataNode和SecondaryNameNode。下面我们分别介绍这四个组成部分。1)Client:就是客户端。 (1)文件切分。文件上... 查看详情

❤️hadoop必知必会的基本知识❤️

🏃‍HDFS🏊‍HDFS的组成架构:这种架构主要由四个部分组成,分别为HDFSClient、NameNode、DataNode和SecondaryNameNode。下面我们分别介绍这四个组成部分。1)Client:就是客户端。 (1)文件切分。文件上... 查看详情

多线程必知必会的知识点

1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。2)... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法字符串转整数#字符串是普通整数a=int('1000')print(a)#1000#字符串是二进制b=int('1000',2)print(b)#8#整数转固定长度的二进制... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法整数列表join设有一个整数列表,实现连接所有整数形成一个字符串,如下:d=[1,2,3,4]print(''.join(d))很遗憾,上... 查看详情

架构实践架构师必知必会的5种业界主流的架构风格

 【架构实践】架构师必知必会的5种业界主流的架构风格目录 【架构实践】架构师必知必会的5种业界主流的架构风格 查看详情

架构实践架构师必知必会的5种业界主流的架构风格

 【架构实践】架构师必知必会的5种业界主流的架构风格目录 【架构实践】架构师必知必会的5种业界主流的架构风格 查看详情

elasticsearchelasticsearch25个必知必会的默认值

...#xff1a;“es节点默认1000个分片的限制”?这引发了我对Elasticsearch默认值的关注。我一搜不要紧:聊天记录中涉及“默认”关键词的讨论接近400多处。这些默认值对于架构选 查看详情

tcp/ip,必知必会的

...TCP拥塞控制 0前言本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。 1TCP/IP模型TCP/IP协议模型(TransmissionControlProtocol/InternetProtocol 查看详情

必知必会的设计原则——合成复用原则(代码片段)

 设计原则系列文章 必知必会的设计原则——单一职责原则必知必会的设计原则——开放封闭原则必知必会的设计原则——依赖倒置原则必知必会的设计原则——里氏替换原则必知必会的设计原则——接口隔离原则必知必... 查看详情

干货做app测试,那些必知必会的adb常用命令

参考技术A>本文节选自霍格沃兹测试学院内部教材为了让大家更好的学习Adb常用命令,我们先从安装Android环境搭建开始讲解哦。安装jdk  ### **  ** **  **###因为AndroidSDK是依赖于java环境的,所以需要... 查看详情

2020最新40k技能清单:聚焦java开发工程师必知必会的进阶知识!

在你身边可有这一些这样的事件现象已经工作两三年了,每个项目都会加班加点全力以赴去完成,薪资增长幅度却不如人意。听说年后离职的老同事,金三刚拿下高薪offer,年薪直奔50万了。由于现在的公司接触不到新技术,对... 查看详情

java开发者必知必会的50个redis知识点,面试/学习都无所畏惧

推荐阅读关于"高并发系统设计"看这篇就够了,阿里、百度、美团都在用Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都... 查看详情

必知必会的mysql知识②使用mysql(代码片段)

...连接MySQLMySQL数据库基本命令小结前言根据上一篇文章【必知必会的MySQL知识】①初探MySQL的内容,想必您对MySQL数据库有了一个整体的了解了,并且应该在自己电脑上已经安装上了MySQL。这一篇呢我们来说一说这么连接上数据库并... 查看详情

java开发者必知必会的50个redis知识点,面试/学习都无所畏惧(代码片段)

推荐阅读关于"高并发系统设计"看这篇就够了,阿里、百度、美团都在用Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都... 查看详情