• es-04-mapping和setting的建立


    mapping和setting, 使用java客户端比较难组装, 可以使用python或者scala

    这儿直接在kibana中进行DSL创建

    1, mapping

    创建索引的时候, 可以事先对数据进行定义, 告诉es如果索引数据并被搜索

    实际上, es会猜测原数据并判断, 但对一些特俗的字段, 需要指定

    类型

    类型: text, keyword(弃用)
    
    数据: long, integer, short, byte, double, float
    
    日期: date
    
    bool类型: boolean
    
    binary: binary
    
    复杂类型: object (内置对象, dict), nested (把object 放在数组中)
    
    geo类型, geo-point, geo-shape
    
    专业: ip, competion

    mapping中, 新的数据 类型相比之前的发生了变化, keyword类型被弃用(v5.x)

    属性: 

    store:            是否存储, 适合all    
    index,            是否分析, 适合string
    null_value:    字段为空, 可设置默认值 NA, 搜索时可以搜搜, 适合all
    analyzer:      分词器, 默认 standard, 一般设置 ik。    适合。all
    include_in_all:     默认es对每个文档设置一个, 让每个字段被搜索到, 如果不想搜索到,
                        就可以设置false
    format:     格式化

    1, 创建index

    PUT test
    {
        "settings" : {
            "number_of_shards" : 1
        },
        "mappings" : {
            "type1" : {
                "properties" : {
                    "field1" : { "type" : "text" }
                }
            }
        }
    }

    mapping 和 type 必须那样写

    2, 删除

    DELETE /twitter

    3, 查看

    GET /twitter

    4, exists

    HEAD twitter

    5, 索引开关

    关闭后的索引, 节省资源, 仅仅维持原数据, 不进行读写操作, 还可以在mapping更新的时候进行

    POST /my_index/_close
    
    POST /my_index/_open

    6, 减少索引

    注意: 素数只能缩减为素数

    1), 创建一个新的包含更少分片的索引

    2), 将segement 从 source index 硬连接到 target source

    3)  恢复索引

    PUT /my_source_index/_settings
    {
      "settings": {
        "index.routing.allocation.require._name": "shrink_node_name", 
        "index.blocks.write": true 
      }
    }
    POST my_source_index/_shrink/my_target_index

    7, split, 扩大分片

    过程和减少类似, 对于已有的数据, 可修改副本, 不可修改分片, 因为数据位置需要分片数来确定, 一旦修改, 之前的就无效了

    a) 准备用于切分的库

    PUT my_source_index
    {
        "settings": {
            "index.number_of_shards" : 1,
            "index.number_of_routing_shards" : 2 
        }
    }

    b), 切分

    POST my_source_index/_split/my_target_index
    {
      "settings": {
        "index.number_of_shards": 2
      }
    }

    c), 创建硬连接

    POST my_source_index/_split/my_target_index
    {
      "settings": {
        "index.number_of_shards": 5 
      },
      "aliases": {
        "my_search_indices": {}
      }
    }

    8, 滚动索引: 

    rollover index 当原索引太旧或者太老的时候, 可以滚动到新的索引上

    9, put mapping

    put mapping可以对一个已有的index添加字段等

    PUT my_index 
    {
      "mappings": {
        "_doc": {
          "properties": {
            "name": {
              "properties": {
                "first": {
                  "type": "text"
                }
              }
            },
            "user_id": {
              "type": "keyword"
            }
          }
        }
      }
    }
    
    PUT my_index/_mapping/_doc
    {
      "properties": {
        "name": {
          "properties": {
            "last": { 
              "type": "text"
            }
          }
        },
        "user_id": {
          "type": "keyword",
          "ignore_above": 100 
        }
      }
    }

    10, get mapping

    GET /twitter/_mapping/_doc

    11, 查看某一个字段的属性

    准备mapping

    PUT publications
    {
      
    "mappings": { "_doc": { "properties": { "id": { "type": "text" }, "title": { "type": "text"}, "abstract": { "type": "text"}, "author": { "properties": { "id": { "type": "text" }, "name": { "type": "text" } } } } } } }
    GET publications/_mapping/_doc/field/title

    或者使用通配符的方式

    GET publications/_mapping/_doc/field/a*

    12 type exists

    HEAD twitter/_mapping/tweet

    13 为索引设置别名

    POST /_aliases
    {
        "actions" : [
            { "add" : { "index" : "test1", "alias" : "alias1" } }
        ]
    }

    删除

    POST /_aliases
    {
        "actions" : [
            { "remove" : { "index" : "test1", "alias" : "alias1" } }
        ]
    }

    为多个索引创建同一个别名(感觉像联合索引)

    POST /_aliases
    {
        "actions" : [
            { "add" : { "indices" : ["test1", "test2"], "alias" : "alias1" } }
        ]
    }

    14 更新索引

    POST /twitter/_close
    
    PUT /twitter/_settings
    {
      "analysis" : {
        "analyzer":{
          "content":{
            "type":"custom",
            "tokenizer":"whitespace"
          }
        }
      }
    }
    
    POST /twitter/_open

    15, get 索引

    GET /twitter,kimchy/_settings

    16 analyze, 进行分词预计

    GET _analyze
    {
      "analyzer" : "standard",
      "text" : ["this is a test", "the second text"]
    }

    explain

    GET _analyze
    {
      "tokenizer" : "standard",
      "filter" : ["snowball"],
      "text" : "detailed output",
      "explain" : true,
      "attributes" : ["keyword"] 
    }

     一个完整的mapping的示例

    put macsearch_fileds
    {
      "settings": {
        "number_of_shards": "3",
        "number_of_replicas": "1"
      },
      "mappings": {
        "mac": {
          "dynamic": "true",
          "properties": {
            "app_name": {
              "type":     "keyword",
              "index_options": "freqs"
            },
            "content": {
              "type": "text",
              "index_options": "offsets"
            },
            "current_time": {
              "type": "long"
            },
            "mac": {
    “store”: “false”,
    "type": "keyword", "index_options": "freqs" }, "server_time": { "type": "long" }, "time": { "type": "text", "index_options": "freqs" }, "topic": {
          “stroe”: “true”,
    "type": "keyword", "index_options": "freqs",
    “analyzer”: “ik_max_word”
    } } } } }

    dynamic取值: 

        true:默认值,动态添加字段;

            false:忽略新字段;

            strict:碰到陌生字段,抛出异常。

    index_options : 

    index_options 参数用于控制增加到倒排索引的信息,为了搜索和高亮。它可以接受如下设置:

    • docs: 只索引文档号。可以用于回答词项是否存在于文档中的这个域。

    • freqs: 文档号和词频都会被存储. 词项频率越高积分越高。

    • positions: 文档号,词项,还有词的位置被索引。位置可以用于模糊或者短语查询。

    • offsets: 文档号,词项,词的位置,和开始到结束的字符偏移(词项映射到原来的字符串)被索引。 偏移提供postings highlighter。

    分析字符串域默认是会使用positions,其他域默认使用docs。

     如果有的字段只想索引, 不想存储, 可以使用 _source

    put security_2
    {
      "settings": {
        "number_of_shards": "5",
        "number_of_replicas": "1"
      },
      "mappings": {
        "push": {
          "dynamic": "true",
          "_source": {
            "excludes": ["AesPhoneNum", "AesEmail"]
          },
          "properties": {
            "AesPhoneNum": {
              "type": "keyword",
              "store": "false", 
              "index_options": "freqs"
            },
            "AesEmail": {
              "type": "keyword",
              "store": "false", 
              "index_options": "freqs"
            }
          }
        }
      }
    }

    对于有数据的需要更改的mapping

    close index
    post mapping
    open index

    这样可以保证原数据不丢, 但执行过程中会丢掉执行过程的1-2s的数据

     2, setting

    1), 可以对一个正在运行的集群进行扩容

    将原 1 个副本, 扩大为2个副本

    PUT /blogs/_settings
    {
       "number_of_replicas" : 2
    }

    但主分片的数量无法更改, 因为分片的位置需要 分片数量来确定, 如果更改, 那么之前存储的数据将无效

    所以不允许修改

    3, ik分词器

    只需要在需要安装的位置, 进行添加ik分词即可

    put macsearch_fileds
    {
      "settings": {
        "number_of_shards": "3",
        "number_of_replicas": "1"
      },
      "mappings": {
        "mac": {
          "dynamic": "true",
          "properties": {
            "app_name": {
              "type":     "keyword",
              "index_options": "freqs"
            },
            "topic": {
              "type": "keyword", 
              "index_options": "freqs",
              “analyzer”: “ik_max_word”
    
            }
          }
        }
      }
    }

    所有的分词器, 如果有index属性的话, 做分词的时候会进行大小写转换,

    而term在查询的时候, 会原样查询, 所以如果有大写可能会匹配不到

  • 相关阅读:
    P3391 文艺平衡树
    隔离村庄(树形dp[01背包])
    cmd指令集
    vs的使用
    博客园第一天
    蓝桥杯 小生物的逃逸 模拟
    蓝桥杯 自行车停放 双向链表
    c++字符数组函数总结
    蓝桥杯 石子游戏 贪心
    蓝桥杯 最大获利 模拟
  • 原文地址:https://www.cnblogs.com/wenbronk/p/9395861.html
Copyright © 2020-2023  润新知