精华内容
下载资源
问答
  • hibernate mapping 文档

    2015-09-20 13:40:54
    详细的hibernate映射文件讲解 , 包含主键映射 , 属性映射 , 容器映射等 ,让你更轻松的使用hibernate
  • MappingMaster 是一个基于 Excel 的简单应用程序,可帮助生成 SAP PI Mapping 文档。 虽然已经有可用的工具,但 MappingMaster 有一些特别之处。 详情请查看 ...
  • Map mapping = new HashMap(); mapping.put("properties", properties); Map jsonMap = new HashMap(); jsonMap.put("_doc", mapping); putMappingRequest.source(jsonMap); try { AcknowledgedResponse ...
    PUT /my_index/_mapping/my_type 
    {
     "properties":
     {
         "like":
             { 
                "type": "keyword"
             } 
     } 
    } 
    
        @Resource(name = "elasticsearchClient")
        private RestHighLevelClient client;
        
        @Test
        public void tesPutMapping() {
            // 添加新字段
            PutMappingRequest putMappingRequest = new PutMappingRequest(INDEX_NAME).type("_doc");
    
            Map<String, Object> like = new HashMap<>();
            like.put("type", "keyword");
    
            Map<String, Object> properties = new HashMap<>();
            properties.put("like", like);
    
            Map<String, Object> mapping = new HashMap<>();
            mapping.put("properties", properties);
    
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("_doc", mapping);
    
    
            putMappingRequest.source(jsonMap);
    
            try {
                AcknowledgedResponse acknowledgedResponse = client.indices().putMapping(putMappingRequest, RequestOptions.DEFAULT);
    
                logger.info("putMapping response:{}", JSON.toJSONString(acknowledgedResponse));
            } catch (Exception e) {
                logger.error("putMapping e:{}", e);
            }
        }

     

    展开全文
  • https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html

    https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html



    一拖半年,参考这里。

    http://www.apache.wiki/pages/viewpage.action?pageId=4260364

    展开全文
  • Informatica PowerCenter Mapping 设计说明文档
  • 原文地址:...Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types"的documents,ES允许每个mapping typ

    原文地址:http://www.cnblogs.com/buzzlight/p/elasticsearch_mapping_fields.html

    mapping

    Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types"的documents,ES允许每个mapping type关联多个mapping定义。

    显式声明的mapping是定义在index/type级别, 默认不需要显式的定义mapping, 当新的type或者field引入时,ES会自动创建并且注册有合理的默认值的mapping(毫无性能压力), 只有要覆盖默认值时才必须要提供mapping定义。

    mapping types

    Mapping types是将索引里的documents按逻辑分组的方式, 类似数据中的表, 虽然不同的types之间有些区别, 但他们并不是完全分开的(说到底还是存在相同的Lucene索引里)。

    强烈建议跨types的同名field有相同的类型定义以及相同的mapping特征(比如analysis的设置), 这在通过type前缀(my_type.my_field)来选择字段时非常有效, 但这也不一定, 有些地方就不起作用(比如字段的聚合faceting)。

    实际上在实践中这个限制从来不是问题, field名通常表明了该field的类型(例如"first_name"总是一个字符串)。 还要注意, 这不适用于跨索引的情况。

    mapping api

    要创建mapping, 需要用到Put Mapping接口, 或者可以在调用create index接口时附带mapping的定义。

    global settings

    全局设置index.mapping.ignore_malformed可以在索引级别上设置是否忽略异常内容(异常内容的一个例子是尝试将字符串类型的值作为数字类型索引), 这个设置是跨mapping types的全局设置。

    fields

    每一个ampping都有一些关联的字段来控制如何索引的document的元数据(例如_all)。

    _uid

    每个索引的document会关联一个id和一个type, 内部的_uid字段将type和id组合起来作为document的唯一标示(这意味着不同的type可以有相同的id, 组合起来仍然是唯一的)。

    在执行基于type的过滤时, 如果_type字段没有被索引,会自动使用_uid字段, 并且不需要_id字段被索引。

     
    1. _uidjava源代码
    2. public static final byte DELIMITER_BYTE = 0x23;
    3. public static void createUidAsBytes(BytesRef type, BytesRef id, BytesRef spare) {
    4. spare.copyBytes(type);
    5. spare.append(DELIMITER_BYTES);
    6. spare.append(id);
    7. }

    _id

    每个索引的document会关联一个id和一个type, _id字段就是用来索引并且存储(可能)id的,默认是不索引(not indexed)并且不存储的(not stored)。

    注意, 即使_id是不索引的, 相关的接口仍然起作用(他们会用_uid字段), 比如用termterms或者prefix来根据ids过滤(包括用ids来查询/过滤)。

    _id字段也可以启用索引或者存储, 配置如下:

     
    1. {
    2. "tweet" : {
    3. "_id" : {"index": "not_analyzed", "store" : "yes"}
    4. }
    5. }

    为了维护向后兼容性, 当升级到0.16时可以在节点级别设置index.mapping._id.indexed为true来确保id能被索引, 尽管不建议索引id。

    可以设置_idpath属性来从源文档中提取id, 例如下面的mapping:

     
    1. {
    2. "tweet" : {
    3. "_id" : {
    4. "path" : "post_id"
    5. }
    6. }
    7. }

    如果提交下面的数据

     
    1. {
    2. "message" : "You know, for Search",
    3. "post_id" : "1"
    4. }

    1会提取出来作为id。

    因为要提取id来决定在哪一个shard执行索引,需要在索引时做额外的解析。

    _type

    每个索引的document会关联一个id和一个type, type在索引时会自动赋给_type字段, 默认_type字段是需要索引的(但不analyzed)并且不存储的, 这就意味着_type字段是可查询的。

    _type字段也可以设置为stored, 例如:

     
    1. {
    2. "tweet" : {
    3. "_type" : {"store" : "yes"}
    4. }
    5. }

    _type字段也可以设置为不索引, 并且此时所有用到_type字段的接口仍然能用。

     
    1. {
    2. "tweet" : {
    3. "_type" : {"index" : "no"}
    4. }
    5. }

    _source

    _source是一个自动生成的字段, 用来存储实际提交的JSON数据, 他是不索引的(不可搜索), 只是用来存储。 在执行"fetch"类的请求时, 比如get或者search, _source字段默认也会返回。

    尽管_source非常有用, 但它确实会占用索引的存储空间, 所以也可以禁用。 比如:

     
    1. {
    2. "tweet" : {
    3. "_source" : {"enabled" : false}
    4. }
    5. }

    compression

    从0.90开始, 所有存储的字段(包括_source)总是被压缩的。

    0.90之前:

    如果要将source字段存储在索引中的话,启用压缩(LZF)会显著减少索引的大小, 还可能提升性能(解压缩比从磁盘上加载一个比较大的source的性能要好)。 代码需要特别注意,只有需要的时候才执行解压缩, 例如直接将数据解压缩到REST的结果流。

    要启用压缩的话, 需要将compress选项设置为true, 默认设置是false。 注意可以在已经存在的索引上修改,ES支持压缩和未压缩的数据混合存放。

    另外,compress_threshold可以控制压缩source的时机,可以设置为表示字节大小的值(比如100b, 10kb)。 注意compress应该设置为true。

    includes / excludes

    可以用path属性来包含/排除source中要存储的字段,支持*通配符,例如:

     
    1. {
    2. "my_type" : {
    3. "_source" : {
    4. "includes" : ["path1.*", "path2.*"],
    5. "excludes" : ["pat3.*"]
    6. }
    7. }
    8. }

    _all

    _all字段的设计目的是用来包罗文档的一个或多个字段, 这对一些特定的查询非常有用, 比如我们要查询文档的内容, 但是不确定要具体查询哪一个字段, 这会占用额外的cpu和索引容量。

    _all字段可以完全禁止掉, field mapping和object mapping可以声明这个字段是否放到_all中。 默认所有的字段都包含在_all中。

    禁用_all字段时, 推荐为index.query.default_field设置一个值(例如, 你的数据有一个"message"字段来存储主要的内容, 就设置为message)。

    _all字段一个很有用的特征是可以把字段的boost等级考虑进去, 假设title字段的boost等级比content字段高, _all中的title值也比_all中的content值等级高。

    以下是一个配置的例子:

     
    1. {
    2. "person" : {
    3. "_all" : {"enabled" : true},
    4. "properties" : {
    5. "name" : {
    6. "type" : "object",
    7. "dynamic" : false,
    8. "properties" : {
    9. "first" : {"type" : "string", "store" : "yes", "include_in_all" : false},
    10. "last" : {"type" : "string", "index" : "not_analyzed"}
    11. }
    12. },
    13. "address" : {
    14. "type" : "object",
    15. "include_in_all" : false,
    16. "properties" : {
    17. "first" : {
    18. "properties" : {
    19. "location" : {"type" : "string", "store" : "yes", "index_name" : "firstLocation"}
    20. }
    21. },
    22. "last" : {
    23. "properties" : {
    24. "location" : {"type" : "string"}
    25. }
    26. }
    27. }
    28. },
    29. "simple1" : {"type" : "long", "include_in_all" : true},
    30. "simple2" : {"type" : "long", "include_in_all" : false}
    31. }
    32. }
    33. }

    在这个例子里, _all字段设置了storeterm_vectoranalyzer(指定index_analyzersearch_analyzer)。

    highlighting

    任何可以highlighting的字段必须既是stored的,又是_source的一部分,默认_all字段不符合这个条件, 所以它的highlighting不会返回任何数据。

    尽管可以设置_all为stored, 但_all从根本上说是所有字段的集合, 也就是说会存储多余的数据,它做highlighting可能产生怪怪的结果。

    _analyzer

    _analyzer mapping可以将document某个字段的值作为索引时所用analyzer的名字,如果一个字段没有显式指定analyzer或者index_analyzer, 索引时就会用这个analyzer。

    下面是配置的例子:

     
    1. {
    2. "type1" : {
    3. "_analyzer" : {
    4. "path" : "my_field"
    5. }
    6. }
    7. }

    上面的配置用my_field字段的值作为analyzer, 比如下面的文档:

     
    1. {
    2. "my_field" : "whitespace"
    3. }

    会让所有没有指定analyzer的字段用whitespace做索引的analyzer。

    path的默认值是_analyzer, 所以可以给_analyzer字段赋值来指定一个analyzer, 如果需要自定义为别的json字段, 需要通过path属性来明确指定。

    默认_analyzer字段是可索引的, 可以在mapping中将index设置为no来禁用。

    _boost

    Boosting是增强文档或者字段关联性的过程,字段级别的mapping可以将boost指定为某个字段。 _boost(应用在root object上)可以指定一个字段,这个字段的内容控制文档的boost级别。 例如下面的mapping:

     
    1. {
    2. "tweet" : {
    3. "_boost" : {"name" : "my_boost", "null_value" : 1.0}
    4. }
    5. }

    上面的定义指定了一个名为字段my_boost的字段, 如果要索引的JSON文档包括my_boost字段, 字段的值就作为文档的boost值, 比如下面的JSON文档的boost值为2.2:

     
    1. {
    2. "my_boost" : 2.2,
    3. "message" : "This is a tweet!"
    4. }

    (注:name属性默认是_boost)

    _parent

    _parent用来定义子类型所关联的父类型, 比如有一个blog类型和一个blog_tag子类型, blog_tag的mapping应该是:

     
    1. {
    2. "blog_tag" : {
    3. "_parent" : {
    4. "type" : "blog"
    5. }
    6. }
    7. }

    _parent默认是stored以及indexed的, 也就是说可以用_parent来查询。

    _routing

    routing是索引数据或者需要明确指定路由时routing的设置。

    store / index

    _routing的mapping默认会存储routing的值(store设置为yes), 之所以这么做是为了可以在routing值来自外部而不是document一部分时仍然可以重建索引。

    required

    另一方面, 可以在_routing的mapping中设置required属性为true来将它设置为必需的,这在使用routing功能是非常重要, 因为很多接口会用到它。 如果没有提供routing值(或者不能从document获取)的话,索引操作就不会执行,再比如如果_routing是必须的但是没有提供routing值的话,删除操作就会广播到所有的分片(shards)上。

    path

    routing的值可以在索引时额外提供(并且作为document的一部分存储, 和_source字段存储方式很像), 也可以根据path自动从要索引的document提取, 例如下面的mapping:

     
    1. {
    2. "comment" : {
    3. "_routing" : {
    4. "required" : true,
    5. "path" : "blog.post_id"
    6. }
    7. }
    8. }

    会使下面的document基于值111222来路由:

     
    1. {
    2. "text" : "the comment text"
    3. "blog" : {
    4. "post_id" : "111222"
    5. }
    6. }

    注意, 使用path而不是明确提供routing值的话, 索引时需要额外的解析过程(尽管相当快)。

    id uniqueness

    如果自定义_routing的话, 不保证_id在所有分片(shards)的唯一性。 事实上, 如果document的_id相同而_routing值不同的话, 会被分配到不同分片上。

    _index

    _index存储一个document属于哪一个索引(index), 该字段默认是禁用的, 如果要启用的话, mapping的定义如下:

     
    1. {
    2. "tweet" : {
    3. "_index" : { "enabled" : true }
    4. }
    5. }

    _size

    _size字段自动存储原始_source的大小, 默认是禁用的, 要启用的话mapping定义如下:

     
    1. {
    2. "tweet" : {
    3. "_size" : {"enabled" : true}
    4. }
    5. }

    如果还要存储的话, 定义如下:

     
    1. {
    2. "tweet" : {
    3. "_size" : {"enabled" : true, "store" : "yes"}
    4. }
    5. }

    _timestamp

    _timestamp字段允许自动索引一个document的时间戳, 它可以在索引请求时提供, 也可以从_source提取,如果没有提供的话会自动设置为document被处理的时间。

    enabled

    _timestamp默认是禁用的, 如果要启用, mapping的定义如下所示:

     
    1. {
    2. "tweet" : {
    3. "_timestamp" : { "enabled" : true }
    4. }
    5. }

    store / index

    默认_timestamp字段的store设置为no, index设置为not_analyzed, 它可以当做一个标准的日期字段来查询。

    path

    _timestamp的值可以在索引请求时额外提供, 也可以根据path自动从document中提取, 例如下面的mapping定义:

     
    1. {
    2. "tweet" : {
    3. "_timestamp" : {
    4. "enabled" : true,
    5. "path" : "post_date"
    6. }
    7. }
    8. }

    提交的数据为

     
    1. {
    2. "message" : "You know, for Search",
    3. "post_date" : "2009-11-15T14:12:12"
    4. }

    时间戳的值就是2009-11-15T14:12:12

    注意, 如果用path方式而没有明确提供时间戳的值的话, 索引时需要额外的解析操作(尽管相当快)。

    format

    你可以定义时间戳的格式, 例如:

     
    1. {
    2. "tweet" : {
    3. "_timestamp" : {
    4. "enabled" : true,
    5. "path" : "post_date",
    6. "format" : "YYYY-MM-dd"
    7. }
    8. }
    9. }

    注意, 默认的格式是dateOptionalTime, 时间戳的值首先作为数字解析, 如果解析失败的话会尝试用定义的格式解析。

    _ttl

    很多documents有过期时间, 可以设置_ttl(time to live)来自动删除过期的documents。

    enabled

    _ttl默认是禁用的, 要启用的话, mapping定义如下:

     
    1. {
    2. "tweet" : {
    3. "_ttl" : { "enabled" : true }
    4. }
    5. }

    store / index

    默认_ttl字段的store设置为yes, index设置为not_analyzed, 注意index必须设置为not_analyzed

    default

    可以为index/type设置默认的_ttl, 比如:

     
    1. {
    2. "tweet" : {
    3. "_ttl" : { "enabled" : true, "default" : "1d" }
    4. }
    5. }

    这种情况下, 如果你没有明确提供_ttl的值, _source里也没有_ttl的话, 所有的tweets的_ttl会被设置为一天。

    如果你没有指定时间的单位,比如d (days), m (minutes), h (hours), ms (milliseconds), (weeks), 默认把毫秒(milliseconds)作为单位。

    如果没有设置默认值, 也没有提供_ttl的值, document会有无限的_ttl,即永不过期。

    可以用put mapping接口动态更新default的值, 这不会改变已有documents的_ttl, 只会影响新的documents。

    note on documents expiration

    过期的documents会自动定期删除, 可以根据你的需要来设置indices.ttl.interval, 默认是60s。

    删除命令是批量处理的, 可以根据你的需要来设置indices.ttl.bulk_size, 默认是10000。

    注意, 删除是根据版本来的, 如果document在收集过期的documents和执行删除操作的时间间隔之间被修改了, document是不会被删除的。


    展开全文
  • Mapping

    千次阅读 2019-08-27 11:14:05
    mapping是定义文档及其字段是如何存储和索引的程序。例如,使用mapping定义: 哪个字符串字段应该视为全文字段 哪个字段包含数字,日期,或地理位置 日期的格式 自定义规则来控制动态添加字段 mapping type 每个...

    mapping是定义文档及其字段是如何存储和索引的程序。例如,使用mapping定义:

    • 哪个字符串字段应该视为全文字段
    • 哪个字段包含数字,日期,或地理位置
    • 日期的格式
    • 自定义规则来控制动态添加字段

    mapping type

    每个索引都有mapping type来决定文档如何被索引。mapping type包含:

    • meta-fields: 比如_index, _type, _id, _source字段,用来定制文档相关的元数据
    • fields or properties:相关文档的字段列表或者properties

    字段数据类型

    每个字段都有数据类型,可以是如下:

    • 简单的类型:text, keyword, date, long, double, boolean, ip
    • 支持JSON这种层次结构的:object, nested
    • 专门的类型:geo_point, geo_shape, completion

    根据不同的目的以不同的方式来索引相同的字段通常很有用。比如,同样的字段可以索引为text类型以便进行全文搜索,也可以作为keyword类型用来排序或聚合。或者同样的值使用不同的分词器。

    大部分字段都支持fields参数的多字段搜索。

    核心数据类型

    • 字符串

      PUT my_index
      {
        "mappings": {
          "properties": {
            "full_name": {
              "type":  "text"
            }
          }
        }
      }
      
      • text 用于全文索引,会被分词处理。适用于文章内容,产品介绍之类的信息。可以接收以下参数:

        • analyzer 指定分词器,同时适用于索引时和搜索时(除非被search_analyzer覆盖),默认值是索引默认的分词器,或者standard分词器
        • boost 字段级别的查询时提升(权重),接收浮点数,默认是1.0
        • eager_global_ordinals 刷新时是否重新加载全局顺序?默认是false。建议对经常用于词条聚合的此段启动该特性。
        • fielddata 该字段是否能使用内存字段数据用来排序,聚合,或者脚本计算?默认false
        • fielddata_frequency_filter 专家设置:当fielddata启用时,是否允许决定哪些值被载入内存,默认情况下加载所有值
        • fields 多字段(multi-fields)允许出于不同的目的以多种方式来索引相同的字段,比如一个字段用于搜索,一个多字段用于排序和聚合,或者对同样的字符串使用不同的分词器
        • index 字段是否可被搜索,默认true
        • index_options 索引中应该存储什么信息用于搜索和高亮,默认是positions
        • index_prefixes 如果启用,2~5个字符的词条前缀将会被索引为一个单独的字段,有助于提高前缀搜索的效率。
        • index_phrases 如果允许,词组会被索引为单独的字段。这使得精确的短语查询更高效。注意,只有当停用词没有被移除时,这个才最有效,因为包含停用词的短语不会使用子字段,而是使用标准的短语查询。默认值是false
        • norms 打分时是否考虑字段长度,默认true
        • position_increment_gap 略
        • store 字段值是否在_source字段外,被独立存储和检索,默认false
        • search_analyzer 指定搜索时的分词器,默认是analyzer 参数的设置
        • search_quote_analyzer 没啥用
        • similarity 使用哪种打分算法,默认是BM25
        • term_vector 略
      • keyword 关键词,适用于标签,状态码,邮件地址,域名,商标等。用于过滤,排序,和聚合,关键词只支持精确搜索。

        PUT my_index
        {
          "mappings": {
            "properties": {
              "tags": {
                "type":  "keyword"
              }
            }
          }
        }
        

        支持的参数如下:

        • ignore_above 默认是2147483647,超过这一长度的字符串无法索引。但是默认的动态mapping会覆盖这个值为ignore_above:256
        • 其他和text类似,具体参见官网
    • 数字

      • long -2^63 ~ 2^63-1

      • integer -2^31 ~ 2^31-1

      • short -32768 ~ 32768

      • byte -128 ~ 127

      • double 64位双精度浮点数

      • float 32位双精度浮点数

      • half_float 16位双精度浮点数

      • scaled_float 略

        PUT my_index
        {
          "mappings": {
            "properties": {
              "number_of_bytes": {
                "type": "integer"
              },
              "time_in_seconds": {
                "type": "float"
              },
              "price": {
                "type": "scaled_float",
                "scaling_factor": 100
              }
            }
          }
        }
        
      • 数字类型的字段支持以下参数:

        • coerce 强制转换字符串为数字,截断分数为整数,默认是true
        • 其他参数参考官网
    • date,JSON没有日期类型,因此ES中的日期可以是

      • 包含日期格式的字符串,比如:"2015-01-01" or "2015/01/01 12:10:30"
      • 时间的毫秒数
      • 时间的整数

      在ES内部,日期会被转换为UTC时间(如果指定了时区),并且存储为代表时间毫秒数的长整数。对于日期的查询会被转化为对这个长整数的范围查询,结果再转化为以该字段定义的日期格式的字符串。日期格式可以自定义,如果没有指定format,会使用如下默认值:

      "strict_date_optional_time||epoch_millis"
      

      这意味它可以接受strict_date_optional_time支持的格式,或者毫秒数,例如:

      PUT my_index
      {
        "mappings": {
          "properties": {
            "date": {
              "type": "date" // 不指定format,那就使用上面提到的默认值
            }
          }
        }
      }
      
      PUT my_index/_doc/1
      { "date": "2015-01-01" }   // 纯日期
      
      PUT my_index/_doc/2
      { "date": "2015-01-01T12:10:30Z" } //日期+时间
      
      PUT my_index/_doc/3
      { "date": 1420070400001 }  // 毫秒数
      
      GET my_index/_search
      {
        "sort": { "date": "asc"} 
      }
      

      自定义多种日期格式:

      PUT my_index
      {
        "mappings": {
          "properties": {
            "date": {
              "type":   "date",
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
      
    • 布尔

      • boolean: true, false
    • 二进制

      • binary

        PUT my_index
        {
          "mappings": {
            "properties": {
              "name": {
                "type": "text"
              },
              "blob": {
                "type": "binary"
              }
            }
          }
        }
        
        PUT my_index/_doc/1
        {
          "name": "Some binary blob",
          "blob": "U29tZSBiaW5hcnkgYmxvYg=="   // base64编码后的二进制
        }
        
    • 范围

      • integer_range: -2^31 ~ 2^31-1
      • float_range
      • long_range
      • double_range
      • date_range

      示例:范围字段在索引文档时,需要使用gte, lte

      PUT range_index
      {
        "settings": {
          "number_of_shards": 2
        },
        "mappings": {
          "properties": {
            "expected_attendees": {
              "type": "integer_range"
            },
            "time_frame": {
              "type": "date_range", 
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
      
      PUT range_index/_doc/1?refresh
      {
        "expected_attendees" : {   // 索引文档时需要指定范围
          "gte" : 10,
          "lte" : 20
        },
        "time_frame" : { 
          "gte" : "2015-10-31 12:00:00", 
          "lte" : "2015-11-01"
        }
      }
      

    复杂数据类型

    • object 对象

      JSON文档本身就是一种结构话的数据,比如:

      PUT my_index/_doc/1
      { 
        "region": "US",
        "manager": { // manager对象
          "age":     30,
          "name": { 
            "first": "John",
            "last":  "Smith"
          }
        }
      }
      

      ES内部会将以上文档索引为扁平的键值对,类似于:

      {
        "region":             "US",
        "manager.age":        30,
        "manager.name.first": "John",
        "manager.name.last":  "Smith"
      }
      

      以上文档的mapping如下:

      PUT my_index
      {
        "mappings": {
          "properties": { 
            "region": {
              "type": "keyword"
            },
            "manager": { // manager作为内部对象,可以有自己的age, name
              "properties": {
                "age":  { "type": "integer" },
                "name": { 
                  "properties": {
                    "first": { "type": "text" },
                    "last":  { "type": "text" }
                  }
                }
              }
            }
          }
        }
      }
      

      object字段支持参数如下:

      • dynamic 是否支持对象的properties动态增加字段,默认"true"
      • enabled 是否允许对象字段直接解析索引JSON,默认"true"
    • nested 嵌套对象,用来支持多个对象构成的数组,mapping如下:

      PUT my_index
      {
        "mappings": {
          "properties": {
            "user": {
              "type": "nested" 
            }
          }
        }
      }
      

      索引文档:

      PUT my_index/_doc/1
      {
        "group" : "fans",
        "user" : [
          {
            "first" : "John",
            "last" :  "Smith"
          },
          {
            "first" : "Alice",
            "last" :  "White"
          }
        ]
      }
      

      查询示例1:

      GET my_index/_search
      {
        "query": {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  { "match": { "user.first": "Alice" }},
                  { "match": { "user.last":  "Smith" }} 
                ]
              }
            }
          }
        }
      }
      

      以上查询无法匹配任何结果,因为"Alice"和"Smith"不在同一个嵌套对象中。

      查询示例2:

      GET my_index/_search
      {
        "query": {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  { "match": { "user.first": "Alice" }},
                  { "match": { "user.last":  "White" }} 
                ]
              }
            },
            "inner_hits": { // 匹配的嵌套文档进行高亮
              "highlight": {
                "fields": {
                  "user.first": {}
                }
              }
            }
          }
        }
      }
      

      由于"Alice"和"White"在同一个嵌套对象中,因此可以查询可以匹配。

    地理信息数据类型

    • geo_point
    • geo_shape

    专门数据类型

    • ip

    • completion 自动完成(搜索建议)

    • token_count:字符串中的词条的数量

    • murmur3 索引时计算内容的哈希值并存储在索引中

    • annotated-text 索引包含特殊标记的文本(用于标识命名实体)

    • join 定义索引中文档的父子关系

      PUT my_index
      {
        "mappings": {
          "properties": {
            "my_join_field": { 
              "type": "join",
              "relations": {
                "question": "answer"  // question和answer是父子关系
              }
            }
          }
        }
      }
      
    • alias 已存在字段定义别名

    • rank 记录数字特征来提高查询的命中

    • vector 向量

    数组

    ES中,数组不需要专门的字段。默认情况下,任何字段都可以包括零个或多个值,但是所有的值必须具有相同的数据类型。

    动态mapping

    字段和mapping类型不需要事先定义,因此在索引文档时,新字段的名字将会自动添加(可以添加到根字段,或者是object和nested子字段)

    详尽mapping

    比起Elasticsearch的“猜测”,你更清楚你的数据。所以一开始可以用动态mapping,到某个阶段后,你可以自己定制mapping。

    你可以在创建索引(集)时创建字段mapping,然后通过PUT mapping API来向已经存在的索引(集)增加字段。

    更新现存字段的mapping

    除了文档之外,现存字段的mapping无法更新。更新字段意味着已经索引的文档会失效。相反,你应该用正确的mapping创建一个新的索引,然后reindex数据到新的索引中。如果你只是想重命名某个字段而不改变mapping,可以使用alias字段。

    示例

    创建索引时指定mapping:

    PUT my_index 
    {
      "mappings": {
        "properties": {
          "title":    { "type": "text"  }, 
          "name":     { "type": "text"  }, 
          "age":      { "type": "integer" },  
          "created":  {
            "type":   "date", 
            "format": "strict_date_optional_time||epoch_millis"
          }
        }
      }
    }
    

    废除mapping types

    7.0之后废除,原先需要指定type的地方,都用_doc代替。

    由于第一版ES中,所有的文档存储在单个索引中,比如user类型的文档和blog类型的文档,他们的数据结构不同,为了区分,就分别定义了user类型,和blog类型。每个文档都有一个_type元字段来标明类型,搜索时也需要指定类型名。另外,在单个索引中,不同的类型的文档可以拥有相同的_id值,因此要唯一标识一个资源,需要通过_type_id

    更多信息查看具体查看官网

    mapping参数

    • normalizer 相当于keyword字段的analyzer,只不过保证语义分析链最终返回一个词条

    • analyzer 略

    • boost 字段权重,默认1.0

    • copy_to 将多个字段的值放到一个字段

      PUT my_index
      {
        "mappings": {
          "properties": {
            "first_name": {
              "type": "text",
              "copy_to": "full_name" 
            },
            "last_name": {
              "type": "text",
              "copy_to": "full_name" 
            },
            "full_name": {
              "type": "text"
            }
          }
        }
      }
      
    • fields 对同一字段指定不同的数据类型和分词器

      PUT my_index
      {
        "mappings": {
          "properties": {
            "city": {
              "type": "text",
              "fields": {
                "raw": { 
                  "type":  "keyword"
                }
              }
            }
          }
        }
      }
      

      city用于全文检索,city.raw作为keyword,可以支持排序聚合

    • completion

    • 其他略,参考text数据类型的参数

    展开全文
  • elasticsearch文档-字段的mapping mapping Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types"的documents,...
  • 1、完整文档 { "mappings": { "_doc": { "properties": { "event_join_user": { "type": "join", "relations": { "user": "event" } }, ...
  • 在前两篇我们介绍了通过postman和elasticsearch-head介绍了操作elasticsearch的增删改查操作和文档的添加、修改、搜索等基本操作。在实际工作中,难免使用Java对elasticsearch进行操作,本篇我们来介绍通过Java...
  • Elasticsearch6.2.2说明文档--Mapping

    千次阅读 2018-03-13 17:46:09
    环境: Elasticsearch: 6.2.2 Kibana: 6.2.2 os: centos 7原文链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html原文链接:...
  • [内核文档]IO-Mapping

    千次阅读 2011-03-22 15:55:00
    <br />IO-Mapping    Linux/io-mapping文件中提供的io映射抽象接口,可以将设备上的小空间有效地映射到处理器。io映射最初用来在32位处理器上支持大的显存,在这种情况下,由于显存太大,不能直接...
  • 1. 索引 索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。你可以把索引看成关系型数据库的表。然而,索引的结构是为快速有效的全文索引准备的,特别是它不存储...2. 文档 存储在Elasti
  • Tone mapping

    2012-03-15 09:04:43
    Tone mapping技术文档. Photographic Tone Reproduction for Digital Images.
  • 详细讲述了Elasticsearch从安装、下载、使用
  • 3 Elasticsearch 篇之Mapping 设置

    千次阅读 2019-01-03 20:21:28
    文章目录mapping简介自定义 mappingcopy_to参数说明index参数说明index_options参数说明mapping文档说明数据类型dynamic-mapping简介dynamic日期与数字识别dynamic-template简介索引模板 mapping简介 ·类似数据库中...
  • CSR Bluelab VM Memory Mapping and Memory Usage Application Note 虚拟机内存映射及使用说明,Bluecore芯片应用程序内存管理必读
  • 在一次作业中要求输出地图文档的pdf文件,批量输出几十幅pdf地图后,感觉结果有点过于简单,发现缺少地图图名、指北针、图例等信息,起码得加个地图图名吧,于是有了这次的尝试。 潜意识里总觉得是通过地图文档来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,013
精华内容 39,605
关键字:

mapping文档