精华内容
下载资源
问答
  • Mapping

    千次阅读 2019-09-04 18:48:24
    什么是Mapping? 字段的数据类型 Dynamic Mapping 类型的自动识别 更改Mapping的字段类型 新增加字段 已有字段 原因 实例 Dynamic为true Dynamic为false Dynamic设为strict 显式定义Mapping 自定义...

    目录

    什么是Mapping?

    字段的数据类型

    Dynamic Mapping

    类型的自动识别

    更改Mapping的字段类型

    新增加字段

    已有字段

    原因

    实例

    Dynamic为true

    Dynamic为false

    Dynamic设为strict

    显式定义Mapping

    自定义Mapping的一些建议

    控制当前字段是否被索引

    Index Options

    null_value

    copy_to

    数组类型

    多字段特性

    Exact Values    vs    Full Text

    自定义分词

    Character Filter

    Tokenizer

    Token Filters

    实例


    什么是Mapping?

    Mapping类似于数据库中的schema定义,作用如下:

    • 定义索引中的字段的名称
    • 定义字段的数据类型,如字符串,数字,布尔等
    • 字段,倒排索引的相关配置(是否分析,用那种分析器)

    Mapping会把json文档映射程Lucene所需要的扁平格式

    一个Mapping属于一个索引的type

    • 每个文档都属于一个type
    • 一个type由一个mapping定义
    • 7.0开始,不需要在mapping中指定type信息

     

    字段的数据类型

    简单类型

    • Text/Keyword
    • Date
    • Integer/Floating
    • Boolean
    • IPv4 & IPv6

    复杂类型-对象和嵌套对象

    特殊类型 

    • geo_point
    • geo_shape

     

    Dynamic Mapping

    写入文档的时候,如果索引不存在,会自动创建索引

    Dynamic Mapping的机制,使得我们无需手动定义Mappings,Elasticsearch会自动根据文档信息,推算出文档类型

    推算有时候并不准确,比如我们将 false加上双引号,则会推算成text,而不是boolean

     

    类型的自动识别

     

    更改Mapping的字段类型

    新增加字段

    • Dynamic设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
    • Dynamic设为false时,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
    • Dynamic设为strict,文档写入失败

    已有字段

    • 一旦已经有数据写入,就不再支持修改字段定义
    • luence实现的倒排索引,一旦生成后,就不允许修改

    原因

    • 如果修改了字段的数据类型,会导致已被索引的数据无法被搜索
    • 但是如果是增加新的字段,就不会有这样的影响

     

    实例

    Dynamic为true

    可以增加字段,新增字段的数据也可以被索引

     

    Dynamic为false

    Dynamic设为strict

    发现无法写入

     

     

    显式定义Mapping

    自定义Mapping的一些建议

    <1>可以参考API手册,纯手写

    <2>为了减少输入的工作量,减少出错效率,可以依照一下步骤

    • 创建一个临时的Index,写入一些样本数据
    • 通过访问Mapping API 获得该临时文件的动态Mapping定义
    • 修改后,使用该配置创建你的索引
    • 删除临时索引

     

    控制当前字段是否被索引

    Index,控制当前字段是否被索引。默认为true,如果为false,则该字段不能被搜索

     

    Index Options

     

    null_value

    需要对null值实现搜索

    只有keyword类型支持Null_Value

     

    copy_to

    _all在7中被copy_to代替

    满足一些特定的搜索需求

    copy_to将字段的数值拷贝到目标字段,实现类似_all的作用

    copy_to的目标字段不出现在_source中

     

     

     

    数组类型

    es不提供专门的数组类型,但是任何字段,都可以包含多个相同类型的数值

     

    多字段特性

    <1>实现精确匹配,增加一个keyword字段。keyword是不做任何处理,就把他当成一个单独的term输出

    <2>使用不同的analyzer

    • 为不同的索引提供不同的analyzer
    • 拼音的搜索

    Exact Values    vs    Full Text

    Exact Values

    包括具体的数字,日期,具体的字符串(App Store)

    es中的keyword

    不需要被分词

    全文本,非结构化的文本数据

    es中的text

     

    自定义分词

    当es自带的分词器无法满足时,可以自定义分词器,通过组合不同的组件(Character Filter,Tokenizer,Token Filter)实现

    Character Filter

    <1>在Tokenizer之前对文本进行处理,例如增加删除及替换字符,可以配置多个Character Filters,会影响Tokenizer position和offset信息

    <2>一些自带的Character Filters

    • html strip 去除html标签
    • mapping 字符串替换
    • pattern replace 正则匹配替换

    Tokenizer

    <1>将原始的文本按照一定的规则,且分为词(term or token)

    <2>es内置的Tokenizers

    • whitespace/standard/uax_url_email/keyword/path_hierarchy

    <3>可以用java开发插件,实现自己的Tokenizer

    Token Filters

    <1>将Tokenizer输出的单词,进行增加,删除,修改

    <2>自带的Token Filters

    • lowcase/stop/synonmy(添加近义词)

     

    网络爬虫抓取的数据,就可以用html_strip将标签剥离

    实例

    <1>html标签剥离,并实现精确匹配

    <2>实现char_filter替换符号

    <3>实现搜索任何一级的目录,都可以得到相应的结果

    <4>移出stop words

    <5>自定义分词器

     

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            #自定义分析器名称
            "my_custom_analyzer":{
              #类型,custom,自定义  
              "type":"custom",
              #分词器,emotions,自定义,过滤表请
              "char_filter":["emotions"],
              #tokenizer自定义,过滤标点符号
              "tokenizer":"punctuation",
              #token filter 自定义english_stop,
              "filter":[
                "lowercase","english_stop"
                ]
            }
          },
          "tokenizer": {
            "punctuation":{
              "type":"pattern",
              "pattern":[".,!?"]
            }
          },
          "char_filter": {
            "emotions":{
              "type":"mapping",
              "mappings":["?=>happy"]
            }
          },
          "filter": {
            "english_stop":{
              "type":"stop",
              "stopwords":"english"
            }
          }
        }
      }
    }
    
    POST my_index/_analyze
    {
      "analyzer":"my_custom_analyzer",
      "text":"i am very ? !?"
    }
    {
      "tokens" : [
        {
          "token" : "i am very happy",
          "start_offset" : 0,
          "end_offset" : 12,
          "type" : "word",
          "position" : 0
        }
      ]
    }

     

     

    mapping character filter 映射字符过滤器

    接收键和值的映射,每当遇到与键相同的字符串时,就用该键关联的值替换他们

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "keyword",
              "char_filter": [
                "my_char_filter"
              ]
            }
          },
          "char_filter": {
            "my_char_filter": {
              "type": "mapping",
              "mappings": [
                "٠ => 0",
                "١ => 1",
                "٢ => 2",
                "٣ => 3",
                "٤ => 4",
                "٥ => 5",
                "٦ => 6",
                "٧ => 7",
                "٨ => 8",
                "٩ => 9"
              ]
            }
          }
        }
      }
    }

     

     

     

     

     

     

    展开全文
  • 访问测试项目路径localhost:8080/hello 后台抛出异常:This application has no explicit mapping for /error, so you are seeing this as a fallback. 抛出此异常表示访问的页面url没有匹配到对应的值,原因有如下...

    访问测试项目路径localhost:8080/hello 后台抛出异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.

    抛出此异常表示访问的页面url没有匹配到对应的值,原因有如下三点:

    • Application启动类的位置不对:要将Application类放在最外侧,即包含所有子包 ,spring-boot会自动加载启动类所在包下及其子包下的所有组件。如下图所示:

                               

    • springboot的配置文件有误:关于application.yml或application.properties文件中视图解析器的配置问题。在pom文件下的spring-boot-starter-paren版本较高时使用以下配置:spring.mvc.view.prefix/spring.mvc.view.suffix,当pom文件下的spring-boot-starter-paren版本较低时使用以下配置:spring.view.prefix/spring.view.suffix。
    • 控制器的url访问路径与注解@GetMapping("/xxxx")不匹配,如下图所示:

    展开全文
  • Mapping 映射,描述了文档字段的属性以及每个字段的数据类型,比如 string, integer 或 date —以及Lucene是如何索引和存储这些字段的,这就是mapping 映射的功能。 这样说可能有些偏概念,我们可以这样来理解,对于...

    概念

    Mapping 映射,描述了文档字段的属性以及每个字段的数据类型,比如 string, integer 或 date —以及Lucene是如何索引和存储这些字段的,这就是mapping 映射的功能。
    这样说可能有些偏概念,我们可以这样来理解,对于mysql数据库来说,每一个表都有一个 schemal 定义,mapping 就是类似 数据库的 schemal,它来描述 索引文档的字段信息。

    • mapping 类似数据库中的 schemal 定义
      - 定义索引文档中的字段的名称
      - 定义索引文档中字段的类型,比如 string, integer 或 date
      - 字段,倒排索引的配置,比如配置 Analyzed 倒排索引分词规则,是否进行分词等
    • mapping 会把 JSON 文档映射成 Lucene 需要的扁平格式
      - Lucene 没有文档、映射的概念,Lucene解析一个文档为一组简单的字段键值对,类似分词的概念,比如一个字符串可以通过分析过程转化为多个值。Lucene 不关心这些值是字符串、数字或日期—​所有的值都被当做 不透明字节 ,这些是不利用户理解的,所以 ElasticSearch 通过 Mapping 来将问那个映射成为Lucene 需要的扁平格式。
    • 一个 mapping 属于一个索引的 type,每个type 都有一份 mapping 定义,在 7 中默认只有一个 type,所以不需要考虑一个索引下的多个type的mapping定义
    # 查看一个索引的mapping
    GET movies/_mapping
    {
      "movies" : {
        "mappings" : {
          "properties" : {
            "genre" : {  # 字段名字
              "type" : "text", # 字段类型
              "analyzer": "whitespace" # 倒排索引分词器
            },
            "id" : {
              "type" : "text",    
            },
            "title" : {
              "type" : "text",
            },
            "year" : {
              "type" : "long"
            }
          }
        }
      }
    }
    
    

    上边就是一个mapping实例,大致样子就是这样,可以看到,定义了字段的名字、类型、倒排索引分析器等信息

    ElasticSearch 的数据类型

    • 简单类型
      - Text / Keyword 字符串文本类型
      - Date 日期类型
      - Integer long / Float dubbo 数字类型
      - Boolean 布尔值类型
      - IPV4 / IPV6 ip地址类型
    • 复杂类型
      - 对象 / 嵌套对象
    • 特殊类型
      - geo_point $ geo_shap / percolator 地理位置信息
      ElasticSearch 中有数组的概念,但是数组不是一个数据类型,而且一个 ElasticSearch 数据类型的集合。

    Text 与 keyword的区别

    • 简单单词,例如 “Apple” 这种的,他就是一个单词,不需要再去分词,或者 1 这种的,可以使用 keyword 或者其他的简单数据类型
    • 全文本,类似 “hello world elastic” 这种的,是一个短语,就需要建立倒排索引来统计词项,这种的可以使用 text 这种全文本类型,搭配分词器使用。
    • keyword 不会去分词,支持精确查找,text 会去分词,支持部分搜索

    动态映射

    当 Elasticsearch 遇到文档 mapping 中以前所没有定义过的字段时,它会自动确定字段的数据类型并把新的字段添加到 mapping 中,这叫做动态映射。
    这样的机制,一般场景还能满足,如果有特殊场景,可能会导致 一些字段不能正确映射,至少与你预期的不一致,这个时候可以选择关闭动态映射,手动添加映射关系,默认动态映射是开启的。

    dynamic = true 动态添加新的字段—​缺省
    		  false 忽略新的字段
    		  strict 如果遇到新字段抛出异常
    

    dynamic mapping 有如下特性

    • 在写入文档时,如果索引不存在,会自动创建索引并且自动映射
    • dynamic mapping 使得我们无需自己去定义 mapping 的类型,ElasticSearch 会自动根据文档信息去推算出字段的类型。
    • 推算特殊时候会失败,比如地理信息,会推算成 字符串文本

    自动推算的类型识别

    JSON 类型 Elastic 类型
    字符串 text
    布尔值 boolean
    浮点数 float
    整数 long (对,不是integer)
    对象 Object
    数组 由第一个非空数字决定类型
    空值 null 忽略

    我们来测试一下自动类型推断

    #写入文档,查看 Mapping
    PUT mapping_test/_doc/1
    {
      "firstName":"Chan",
      "lastName": "Jackie",
      "loginDate":"2018-07-24T10:29:48.103Z",
      "bat": null,
      "age": 11
    }
    
    #查看 Mapping文件
    GET mapping_test/_mapping
    结果:{
      "mapping_test" : {
        "mappings" : {
          "properties" : {
            "age" : {
              "type" : "long"
            },
            "firstName" : {
              "type" : "text",
            },
            "lastName" : {
              "type" : "text",
            },
            "loginDate" : {
              "type" : "date"
            }
          }
        }
      }
    }
    

    我们可以看到结果, age 被计算成了 long, loginDate被计算成了 date,bat 则被忽略掉了

    dynamic 值的配置

    dynamic配置不同时,新增字段的状态是不一样的

    • dynamic 为 true
      - 有新字段加入,mappin也会自动更新
    • dynamic 为 false
      - 有新字段加入,mapping不会被更新,但是新字段会被加入到 _source 元数据中,不过不能被索引查询
    • dynamic 为 strict
      - 写入直接失败
    • 已有的字段,是不支持修改 mapping的,无论 dynamic 配置是什么,这是 Lucene的 特性,倒排索引一旦生成,不支持修改 (除非重建索引 Reindex API)

    修改 dynamic API

    修改 dynamic 之前,这条索引必须已经存在,否则会异常

    #修改dynamic false
    PUT dynamic_mapping_test/_mapping
    {
      "dynamic": false
    }
    

    dynamic 为 false 的测试

    我们设置 dynamic为 false并且新增一个字段 anotherField

    #修改为dynamic false
    PUT dynamic_mapping_test/_mapping
    {
      "dynamic": false
    }
    
    #新增 anotherField
    PUT dynamic_mapping_test/_doc/10
    {
      "anotherField":"someValue"
    }
    新增结果
    {
      "_index" : "dynamic_mapping_test",
      "_type" : "_doc",
      "_id" : "10",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 1
    }
    

    结果显示新增字段成功了,我们查看一下索引 mapping 、_source 以及 search一下

    #查看mapping
    get dynamic_mapping_test/_mapping
    {
      "dynamic_mapping_test" : {
        "mappings" : {
          "dynamic" : "false",
          "properties" : {
            "newField" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }
    #查询这条数据
    get dynamic_mapping_test/_doc/10
    {
      "_index" : "dynamic_mapping_test",
      "_type" : "_doc",
      "_id" : "10",
      "_version" : 1,
      "_seq_no" : 1,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "anotherField" : "someValue"
      }
    }
    #该字段不可以被搜索,因为dynamic已经被设置为false
    POST dynamic_mapping_test/_search
    {
      "query":{
        "match":{
          "anotherField":"someValue"
        }
      }
    }
    搜索结果:{
      "took" : 0,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 0,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ] # hits 为空不能被搜索
      }
    }
    

    可以看到,_source中有这个字段,但是mapping中没有这个字段映射,并且不能被搜索

    显式设定自定义 mapping

    有些时候 dynamic mapping 会出现一些纰漏,所以一般在生产中使用 ElasticSearch 时,dynamic mapping 是关闭的并且使用自定义的设定 mapping 方式来管理索引映射。
    显式的设定 mapping Api 其实是很简单的,请求格式如下:

    • 请求方法(PUT) + 索引名字 + mapping的JSON
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text"
            },
            "lastName" : {
              "type" : "text"
            },
            "mobile" : {
              "type" : "text",
            }
          }
        }
    }
    

    如上就是一个自定义mapping的设置格式,一般在 mapping 下是由一个 properties 属性的,这个是格式。

    注意

    • 手动设定mapping的时候,要参考mapping的API设置手册,来保证你的映射字段是最适合的,比如类型,text 是会分词的,keyword 则是精确搜索不会分词,这些需要根据需求去处理
    • mapping 文件很大的,为了减少工作量可以拷贝一个模板过来照着改你的字段

    Mapping 字段的一些配置属性

    一个 mapping 映射文件,并不是如上只设置一个数据类型便好的,mapping还可以设置很多属性。

    控制当前字段是否被索引(创建倒排索引)

    • index 属性控制当前字段是否可以在搜索中被索引搜索,默认为 true, 如果设置为false,则这个字段不能被搜索,因为不会为这个字段去创建倒排索引。比如用户的手机号这种私密信息,不希望被搜索可以设置这个(不能搜索但是不代表这个数据不会出现在_source中)
    # 设置索引 mobile 为 index:false
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text"
            },
            "mobile" : {
              "type" : "text",
              "index": false  # 设置不允许创建倒排所云
            }
          }
        }
    }
    
    # 索引一个文档
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming",
      "mobile": "12345678"
    }
    
    #根据 mobile 搜索
    POST /users/_search
    {
      "query": {
        "match": {
          "mobile":"12345678"
        }
      }
    }
    # 报错 非法参数异常
     "index": "users",
     "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "Cannot search on field [mobile] since it is not indexed."
    }
    

    null_value 处理 null 值

    ElasticSearch 在处理 null 值得搜索时,是不会去处理的,但是如果我们有需求,就是要对一些null值做搜索,那应该怎么办,这个时候就可以设置 null_value 属性。

    • 需要对 null 值进行搜索
    • 只有keyword 类型支持 null_value
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text"
            }
            "mobile" : {
              "type" : "keyword",
              "null_value": "empty"
            }
    
          }
        }
    }
    

    以上就是一个 null_value的配置,这个 empty 是你在搜索时要指定的那个值,相当于是代替 null的一个标识,只要使用 empty ,便是表明你要搜索 null 值。 'empty ’ 可以替代为任何值,比如 ‘ddd’ 都行。

    # 一个有 null 值的文档
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming",
      "mobile": null
    }
    # 正常的索引搜索
    POST /users/_search
    {												"hits" : {
      "query": {											 "total"{}
        "match": {											"max_score" : null,
          "mobile":"null"									"hits" : [ ]
        }												 }
      }
    }
    
    # 设置了 null_value 之后的值
    GET users/_search                              "hits" : [
    {													   {
      "query": {												"_index" : "users",
        "match": {												"_type" : "_doc",
          "mobile":"empty"										"_source" : {
        }															"firstName" : "Ruan",
      }																 "mobile" : null
    }																}
    														}
    

    正常的结果是没有找到数据,我们再试一下设置了 null_value的字段,通过 empty 去查找,发现找到了mobile 为 null 的值。

    copy_to 聚合多个字段的值为一个搜索项

    copy_to 有些类似废弃的 _all 属性,它所起的功能是将多个字段的值组合为一个搜索项,然后支持搜索,比如有个文档 ‘one’:‘start’,‘two’:‘end’,然后在这两个值上设置了copy_to 属性,那么最终会合成一个搜索项 ‘start end’.

    • 满足一些特定的搜索需求
    • 将多个字段的值拷贝到目标搜索字段
    • copy_to 的目标字段不会出现在 _source 中
    #设置 Copy to
    PUT users
    {
      "mappings": {
        "properties": {
          "firstName":{
            "type": "text",
            "copy_to": "fullName"
          },
          "lastName":{
            "type": "text",
            "copy_to": "fullName"
          }
        }
      }
    }
    

    以上就是一个 copy_to 的使用方法,最终将 firstName 与 lastName合并成了一个 fullName。

    #索引一个文档
    PUT users/_doc/1
    {
      "firstName":"Ruan",
      "lastName": "Yiming"
    }
    #搜索fulleName 为两个字段的组合值
    GET users/_search?q=fullName:(Ruan Yiming)
    结果:
    "hits" : [
          {
            "_index" : "users",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 0.5753642,
            "_source" : {
              "firstName" : "Ruan",
              "lastName" : "Yiming"
            }
          }
        ]
    

    最终是可以通过 fullName 将文档搜索出来,但是在 _source 中,并没有 fullName 这个字段,也就是文档中其实并不不存在 fullName,只是建了一个fullName的倒排索引。

    fields 多字段属性

    多字段属性,可以让同一个 text 文本有多种不同的索引方式,包括使用不同的分词器,ElasticSearch 默认会为text 文本添加一个 keyword 的搜索方式,支持精确查找以及聚合等功能。

    • 增加 keyword 支持精确查找
    • 配置 analyzer 使用不同的语言分词器
    # 多字段属性
    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text",
              "fields": {
                "keyword": { # 配置了一个子字段 keyword 支持精确查找
                  "type": "keyword"
                },
                "english": { # 配置了一个子字段 english 支持 英文分词
                  "type": "text",
                  "analyzer": "english"
                }
              }
            }
          }
        }
    }
    # 搜索
    POST /users/_search
    {
      "query": {
        "match": {
          "firstName.english":"Ruan"
        }
      }
    }
    

    分词器

    是在处理 text 文本这种类型是建立倒排索引所需要的词项处理工具,他会根据不同的规则去处理词项,比如中文分词器,会根据汉语的规则去分词,中文分词器比较好用的是清华大学研制的一款ElasticSearch 分词器。

    PUT users
    {
        "mappings" : {
          "properties" : {
            "firstName" : {
              "type" : "text",
               "analyzer": "english"
            }
          }
        }
    }
    

    如上就是一个多字段的配置,在 firstName 下,我们多了两个子字段,一个支持精确查找,一个支持英文分词,搜索的时候可以 firstName.keyword 或者 firstName.english 来指定使用哪个功能。

    mapping parameters 全部的参数设置

    参数名 描述
    analyzer 分词器(分析器),配置这个指定倒排索引根据什么去分词,比如:“analyzer”: “ik_max_word”
    normalizer 用于解析前的标准化配置,比如把所有的字符转化为小写等
    boost 设置字段的权重,会在搜索时优先考虑这个值 例如:“boost”: 2
    coerce 是否去自动转化文档字段数据为mapping的映射类型,关闭之后如果添加文档时类型不相符则会报错 例如:“coerce”: false
    copy_to 将多个字段的值组合成为一个 搜索项,只能被搜索,不会出现在 _source中,例如:“copy_to”: “full_name”
    doc_values 是否保存字段到磁盘中,关闭后字段数据将不会存储到磁盘中并且不会被索引以及聚合。例如: “doc_values”: false
    dynamic 对嵌套字段是否开启动态映射功能 例如: “dynamic”: true
    enabled 与 index 功能类似,只会被存储并不会被搜索。例如:“enabled”: false
    fielddata fielddata会占用大量的堆内存,是针对text型的字段查询的一个数据结构,它会将 text 的词项在查询时保存到内存中来做索引,资源消耗很大,不推荐使用,默认不要开启就好了
    eager_global_ordinals 全局映射器,开启这个会默认在分片中为词项分配一个全局的递增序列号,倒排索引时只需要处理这个序列号便可以不需要加载原本的数据值,这个参数可以优化查询性能。例如:“eager_global_ordinals”: true
    format 用于格式化日期属性 比如:“format”: “yyyy-MM-dd”
    ignore_above 超过 ignore_above 的字符串不会被索引存储。对于字符串数组, 如果单个子元素字符串超过了 ignore_above也不会被索引存储。例如:“ignore_above”: 20
    ignore_malformed ignore_malformed可以无视不规则数据。一般如果数据格式映射不对整个文档会报错,如果ignore_malformed参数设为true,异常会被忽略,出异常的字段不会被索引,其它字段正常索引。“ignore_malformed”: true
    index_options index_options 参数控制将哪些信息添加到倒排索引,用于搜索和突出显示目的,这个一般默认就好,是建立倒排索引用的。
    index_phrases 与 copy_to 的功能类似
    index_prefixes 设置前缀索引的索引词范围 例如:“index_prefixes”: { “min_chars” : 1, “max_chars” : 10 }
    index 是否为该字段建立倒排索引,默认为true,设为false,不能被搜索
    fields 多字段属性,可以让 同一 text 文本有多种不同的索引方式,动态映射默认就是用的这个
    norms norms 在计算相关性得分时很有用, 用于在查询时计算查询条件的相关性得分的标准化因子,但是同样需要消耗大量内存。例如:“norms”: false
    null_value 指定null值可被搜索
    position_increment_gap 为了支持短语查询,需要保存可分词字符串自顿啊中分词的位置。当字符串字段索引多个值,一个“虚拟”缺口会被加载各个值之间来防止短语查询跨值匹配,缺口的大小可以使用position_increment_gap配置,默认100. 例如 :“position_increment_gap”: 10
    properties 一般是一个mapping的跟节点,会将 字段,对象,嵌套对象类型的 子字段成为属性可以直接被搜索。
    search_analyzer 为搜索单独设置一个分词器。例如:“search_analyzer”: “standard”
    similarity Elasticsearch 允许你为每个字段配置得分算法或者相似算法。similarity 提供了一个简单的算法来选择不同于默认BM25的相似算法, 例如 TF/IDF.Similarities 大多用于 text 型字段, 但是也可以用于其他类型字段。
    store 是否被存储
    term_vector 包含分析过程产生的索引词信息,可以选择要存储那些信息,不建议配置
    展开全文
  • IROS2018 Mapping

    万次阅读 2019-12-14 16:15:57
    Mapping A B-spline Mapping Framework for Long-Term Autonomous Operations, Rômulo T. Rodrigues, A. Pedro Aguiar and António Pascoal [video] C-blox A Scalable and Consistent TSDF-based Dense Mapping ...

    Mapping

    1. A B-spline Mapping Framework for Long-Term Autonomous Operations, Rômulo T. Rodrigues, A. Pedro Aguiar and António Pascoal [video]
    2. C-blox A Scalable and Consistent TSDF-based Dense Mapping Approach, Alexander Millane, Zachary Taylor, Helen Oleynikova, Juan Nieto, Roland Siegwart, César Cadena [pdf] [code]
    3. Efficient Long-term Mapping in Dynamic Environments, Marı́a T. Lázaro, Roberto Capobianco and Giorgio Grisetti [code]
    4. HMAPs – Hybrid Height-Voxel Maps for Environment Representation, Luı́s Garrote, Cristiano Premebida, David Silva, Urbano J. Nunes
    5. Human-in-the-loop Augmented Mapping, Abbas Sidaoui, Imad H. Elhajj, and Daniel Asmar
    6. Structured Skip List A Compact Data Structure for 3D Reconstruction, Shi-Jie Li, Ming-Ming Cheng, Yun Liu, Shao-Ping Lu, YaHui Wang, Victor Adrian Prisacariu [pdf]
    展开全文
  • PDO mapping

    千次阅读 2018-03-26 17:40:29
    PDO Mapping
  • Mapping 与 Dynamic Mapping Mapping 定义索引中字段名称 定义索引中字段类型 字段,倒排索引的相关配置 Mapping 把JSON文档映射成Lucene所需要的扁平格式 Dynamic Mapping 在写入文档时,如果索引不存在,便会...
  • ES入门(三)Elasticsearch之Mapping(Dynamic Mapping与显示Mapping) 什么是mappingmapping类似数据库中的schema的定义,作用如下 定义索引中的字段名称 定义字段的数据类型,例如字符串、数字、布尔。。。...
  • 什么是Mapping(映射) 映射(Mapping)相当于数据表的表结构。ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。 映射可以分为动态映射和静态映射。...
  • QinQ、VLAN Mapping原理和配置

    万次阅读 多人点赞 2020-07-20 00:03:29
    文章目录一、QinQ 基本原理二、VLAN Mapping 基本原理三、拓扑四、配置与分析五、总结 一、QinQ 基本原理 QinQ是指在802.1Q VLAN的基础上增加一层802.1Q VLAN标签,从而拓展VLAN的使 用空间。在公网的传输过程中,...
  • Tone Mapping

    千次阅读 2016-04-26 18:32:17
    Tone Mapping三月 10, 2011 BY JIMMY·3 COMMENTS Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能...
  • arcpy.mapping-认识arcpy.mapping

    千次阅读 2016-11-28 10:13:32
    arcpy.mapping-认识arcpy.mapping by 李远祥 ArcMap提供了强大的地图制图功能,在实际的工作中,只要涉及到专题地图和地图册的制作,难免会遇到非常多的出图工作和地图图面元素的调整,这部分的工作虽然简单,但基本...
  • ES mapping 详解

    万次阅读 2018-10-12 15:41:21
    1 mapping type 映射(mapping) 映射是定义一个文档以及其所包含的字段如何被存储和索引的方法。 例如,用映射来定义以下内容: 哪些 string 类型的 field 应当被当成当成 full-text 字段 哪些字段应该是数值...
  • Environment Mapping

    千次阅读 2016-07-09 17:27:29
    Environment Mapping Texture cubes的另一种应用是environment mapping。Environment mapping也称为reflection mapping,用于近似模拟reflective surfaces(反光表面),比如汽车上的镀了一层金属物的保险杠。 ...
  • ElasticSearch增加MappingMapping字段

    万次阅读 2018-06-08 10:53:22
    创建Mapping POST /new_test/record/_mapping/ { "record": { "properties": { "analyze_date": { "format": "yyyy-MM-dd HH:mm:ss", "...
  • Tone mapping

    千次阅读 2018-03-12 16:22:39
    转自KlayGE游戏引擎Reinhard早期的普遍做法是一篇叫做Photographic Tone Reproduction for Digital Images的论文,大家就用作者的名字称它为Reinhard tone mapping。这是个经验公式,把HDR到LDR的变换简单的描述了...
  • SLAM RGB-D mapping

    万次阅读 2019-12-14 12:41:35
    RGB-D mapping 3D indoor scene modeling from RGB-D data: a survey K. Chen, YK. Lai and SM. Hu. Computational Visual Media 2015. State of the Art on 3D Reconstruction with RGB-D Cameras K. Hildebrandt a...
  • es 查看mapping

    万次阅读 2018-09-13 14:31:15
    mapping,就是index的type的元数据,每个type都有自己一个mapping,决定了数据类型,建立倒排索引的行为,还有进行搜素的行为。 mapping核心的数据类型 string byte,short,integer,long float,double boolean date ...
  • java8 Collectors.mapping 使用 例子 学习

    万次阅读 2019-09-20 15:59:31
    java8 Collectors.mapping 使用 例子 学习 Map<String, List<String>> colorApple = appleList.stream().collect(Collectors.groupingBy(Apple::getColor, Collectors.ma...
  • 第九章 Normal Mapping and Displacement Mapping
  • Elastic Search之自定义Mapping

    千次阅读 2018-12-28 12:51:54
    这里说的Mapping就是索引结构,你可以看做是数据库中的表结构,包括字段名、字段类型、倒排索引相关设置。es中查询索引的mapping结构api的endpoint为_mapping,如下图: 右侧的查询结果我们就称为索引的"...
  • VLAN Mapping

    千次阅读 2018-03-16 17:35:57
    VLAN Mapping原理:当端口配置了vlan id映射后,端口在向外发送本地vlan的帧时,将帧中的vlan tag替换成外部的vlan tag;在接收外部vlan的帧时,将帧中的vlan tag替换成本地vlan的vlan tag,来实现不同vlan将的互通...
  • 各种Mapping的区别

    万次阅读 2020-08-27 18:37:36
    1、@Controller @Controller 用来响应页面,表示当前的类为控制器。 2、@RestController @RestController 是@ResponseBody和@Controller的结合 表明当前类是控制器且返回的是一组数据,不是页面 ...
  • ElasticSearch映射 Mapping

    万次阅读 2019-04-03 15:04:49
    ElasticSearch映射 Mapping 为了能够把日期字段处理成日期, 把数字字段处理成数字, 把字符串字段处理成全文本( Full-text) 或精确的字符串值, Elasticsearch需要知道每个字段里面都包含了什么类型。 这些类型...
  • Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='input', mode=IN, javaType=class java.lang.String, jdbcType=null, numericSc
  • Tone Mapping(简洁直观的Tonemapping介绍)

    千次阅读 2019-11-25 14:36:54
    转自:...What is tone mapping? Most monitors are capable of displaying RGB values in the range of[0, 255][0,255]. However, in real life, there is no limit on the amount ...
  • ES 修改mapping

    千次阅读 2020-02-19 16:21:36
    场景 在mysql中 我们经常遇到产品修改需求 我们可能会在原有数据库表基础上 对字段 索引 ...ES的mapping一旦设置了之后 是不能修改的 因为ES默认是对所有字段进行索引 如果你修改了mapping 那么已经索引过的数据...
  • ES 创建mapping

    2019-09-27 12:51:00
    mapping的写入与查看首先创建一个索引: curl -XPUT "http://erp2.es.kd1.pagoda.com.cn:80/erp_stock_index"{"acknowledged":true} 现在只创建了一个索引,并没有设置mapping,查看一下索引mapping的内容: curl...
  • 今天在写一个新增的接口时候,一直报Could not set parameters for mapping: ParameterMapping错误   xml文件中内容   原因是因为#{ }写在字符串中不能识别,要改写成${ }这种形式  ...
  • Sphere mapping 和 Cube mapping

    千次阅读 2012-02-07 16:43:31
    Sphere mapping 和 Cube mapping也是常见的技术。 Sphere map更早,是较早提出的环境映射的方法。  Sphere mapping 是基于这样一个事实:将一个理想高反射的球体置于场景中央,从一个角度无穷远处拍摄此球体,将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 613,357
精华内容 245,342
关键字:

mapping