• 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问题

  • 相关阅读:
    TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常?
    当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
    @Qualifier 注解?
    Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
    Filter是什么?有什么作用?
    List和 Map区别?
    Spring框架的事务管理有哪些优点?
    Listener是什么?有什么作用?
    字节流与字符流的区别?
    Struts2里面有什么隐式对象?
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185087.html
Copyright © 2020-2023  润新知