zoukankan      html  css  js  c++  java
  • Elasticsearch Mapping索引映射

    Mapping 可以:

    • 定义 Index 下的字段名(Field Name)
    • 定义字段的类型,比如数值型、字符型、布尔型
    • 定义倒排索引相关的配置,比如是否索引、记录position等
    GET kibana_sample_data_flights
    {
      "kibana_sample_data_flights" : {
        "aliases" : { },
        "mappings" : {
          "properties" : {
            "AvgTicketPrice" : {
              "type" : "float"
            },
            "Cancelled" : {
              "type" : "boolean"
            },
            "Carrier" : {
              "type" : "keyword"
            },
            "Dest" : {
              "type" : "keyword"
            },
            "DestAirportID" : {
              "type" : "keyword"
            },
            "DestCityName" : {
              "type" : "keyword"
            },
            ...
          }
        },
        "settings" : {
          "index" : {
            "number_of_shards" : "1",
            "auto_expand_replicas" : "0-1",
            "provided_name" : "kibana_sample_data_flights",
            "creation_date" : "1574647860171",
            "number_of_replicas" : "0",
            "uuid" : "AagbcCRyTKSJepOGo1_DKQ",
            "version" : {
              "created" : "7040299"
            }
          }
        }
      }
    }
    

    类型的自动识别

    动态映射 Dynamic Mapping

    JSON datatype Elasticsearch datatype
    空值 null 没有字段添加
    布尔值 true or false boolean
    整数 long
    对象 object
    数组 由第一个非空数值的类型所决定
    字符串 - 匹配日期格式,设置为 Date
    - 匹配数字设置为 double或long字段,该选县默认关系
    - 设置为Text,并且增加 keyword 子字段
    浮点数 float

    数字用引号,默认当 text;日期格式会推到成 Date;有些类型会推导错误,比如日期类型。

    #写入文档,查看 Mapping
    PUT mapping_test/_doc/1
    {
      "firstName":"Chan",
      "lastName": "Jackie",
      "loginDate":"2018-07-24T10:29:48.103Z"
    }
    
    #查看 Mapping文件
    GET mapping_test/_mapping
    
    
    #Delete index
    DELETE mapping_test
    
    #dynamic mapping,推断字段的类型
    PUT mapping_test/_doc/1
    {
        "uid" : "123",
        "isVip" : false,
        "isAdmin": "true",
        "age":19,
        "heigh":180
    }
    
    #查看 Dynamic
    GET mapping_test/_mapping
    
    
    #默认Mapping支持dynamic,写入的文档中加入新的字段
    PUT dynamic_mapping_test/_doc/1
    {
      "newField":"someValue"
    }
    

    如何显示定义 Mapping

    静态映射(自定义映射)

    #设置 index 为 false
    DELETE users
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text"
            },
            "lastName" : {
              "type" : "text"
            },
            "mobile" : {
              "type" : "text",
              "index": false   控制当前字段是否被索引,默认为true,为false表示该字段不可被搜索
            }
          }
        }
    }
    
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming",
      "mobile": "12345678"
    }
    
    
    POST /users/_search
    {
      "query": {
        "match": {
          "mobile":"12345678"
        }
      }
    }
    
    #设定Null_value
    - 需要对 Null 值实现搜索
    - 只有 Keyword 类型支持设定 null_value
    
    DELETE users
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text"
            },
            "lastName" : {
              "type" : "text"
            },
            "mobile" : {
              "type" : "keyword",
              "null_value": "NULL"
            }
    
    
          }
        }
    }
    
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming",
      "mobile": null
    }
    
    PUT users/_doc/2
    {
      "firstName":"Ruan2",
      "lastName": "Yiming2"
    }
    
    GET users/_search
    {
      "query": {
        "match": {
          "mobile":"NULL"
        }
      }
    }
    
    # 设置 Copy to
    - _all 在 7 中被 copy_to 所代替
    - 满足一些特定的搜索需求
    - copy_to 将字段的数值拷贝到目标字段,实现类似 _all 的作用
    - copy_to 的目标字段不出现在 _source 中
    
    DELETE users
    PUT users
    {
      "mappings": {
        "properties": {
          "firstName":{
            "type": "text",
            "copy_to": "fullName"
          },
          "lastName":{
            "type": "text",
            "copy_to": "fullName"
          }
        }
      }
    }
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming"
    }
    
    使用 copy_to 之后就可以用 fullName 进行查询
    GET users/_search?q=fullName:(Ruan Yiming)
    
    POST users/_search
    {
      "query": {
        "match": {
           "fullName":{
            "query": "Ruan Yiming",
            "operator": "and"
          }
        }
      }
    }
    
    # 数组类型
    Elasticsearch 中不提供专门的数组类型。但是任何字段,都可以包含多个相同类型的数值
    
    PUT users/_doc/1
    {
      "name":"onebird",
      "interests":"reading"
    }
    
    PUT users/_doc/1
    {
      "name":"twobirds",
      "interests":["reading","music"]
    }
    
    POST users/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
    GET users/_mapping
    

    类型及范围说明

    下面这些表格摘自《从Lucene到Elasticsearch》

    Elasticsearch字段类型
    数字类型及其取值范围
    Elasticsearch地理形状说明
    range类型及其取值范围
    Elasticsearch元字段分类

    相关文章

    Mapping Params

    Elasticsearch 技术分析(二): 索引映射Mapping问题

  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185087.html
Copyright © 2011-2022 走看看