elasticsearch的映射

Posted lyq-biu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch的映射相关的知识,希望对你有一定的参考价值。

一.简介:

  映射:在创建索引时,可以预先定义字段的类型(映射类型,也就是type,一个索引可以有一个或多个类型)及相关属性。

  Elasticsearch会根据JSON源数据的基础类型猜测你想要的字段映射。将输入的数据转变成可搜索的索引项。Mapping就是我们定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。

  作用:会让索引建立的更加细致和完善。

二.映射类型: 

  1.3 动态映射:

    字段和属性不需要预先事先定义。在你添加文档的时候,就会自动添加到索引,这个过程不需要事先在索引进行字段数据类型匹配之类,他会自己推断数据类型,动态映射是可以配置的。

  1.4 显示映射:   

    和动态映射相反,显示映射需要我们在索引映射中进行预先定义。

  1.5 更新当前映射: 

     一般我们不会改变当前的索引的映射类型和字段,因为这样,意味着废弃已经索引的文档。我们应该根据映射创建新的索引并重新索引数据。

三.内置类型:

  1.string类型:

    text(会进行分析【分词,建立倒排索引】),keyword【不会分析,只有完全匹配才能搜索到】,(string类型在es5后已经废弃了)

  2.数字类型:

    long、integer、short、byte、double、float

  3.日期类型:

    date(可以解析date和datetime(时分秒)等日期)

  4.bool类型:

    boolean(可以解析传递过来的值,True/False/Yes/No等都能解析成bool类型)

  5.二进制数据类型:

    binary(不会被检索)

  6.复杂数据类型

     数组:无需专门的数据类型

    对象数据类型:object,单独的JSON对象

    嵌套数据类型:nested,关于JSON对象的数组

技术分享图片

如Company就是一个object类型

技术分享图片

 emplyment是一个nested类型

  7.geo类型(地理数据类型):   

    地理点数据类型:geo_point,经纬点

     地理形状数据类型:geo_shape

  8.专业数据类型:

    IPv4数据类型

     完成数据类型:completion

    单词计数数据类型:token_counts

三.数据类型可以接收的参数

  1.简单概括:

属性 描述 适合类型
store 值为yes表示存储,为no表示不存储,默认为no all
index yes表示分析,no表示不分析,默认为true string
null_value 如果字段为空,可以设置一个默认值,比如"人生" all
analyzer 可以设置索引和搜索时用的分析器,默认使用的是standard分析器,还可以使用whitespace,simple,english all
include_in_all 默认es为每个文档定义一个特殊域_all,它的作用是让每个字段被搜索到,如果不想让某个字段被搜索到,可以设置为false all
format 时间格式字符串的模式 date

  2.详细:

    2.1符串可以接收的参数:

技术分享图片

 

    2.2数字型可以接收的参数:

技术分享图片

 

    2.3日期型可以接收的参数:

技术分享图片

 

    2.4布尔型可以接收的参数:

技术分享图片

四.演示

  1.创建索引及映射(创建映射后无法修改): 

PUT lagou
 {
 #参数mappings
    "mappings":
    {
 #指定表jobs
      "jobs":
      {
 #参数(中文特性,性能)
       "properties":
       {
 #指定类型为text,会分词等
        "title":{
           "type":"text"
         },
 #指定类型为integer
           "salary_min":
        {
           "type":"integer"
        },
        "city":{
 #指定类型为keyword,不分词,必须完全匹配才搜索得到
              "type":"keyword"     
     }.

 #嵌套properies
       "Company":{
         "properties":{
           "name":{
            "type":"text"
           },
           "address":{
            "type":"text"
           }
        }
     },
#date类型
     "pub-date":{
      "type":"date"
   }
   }
   }
  }
 }         

 

技术分享图片

运行成功

技术分享图片

查看索引信息一致

  2.数据插入:

PUT lagou/job/1
{
  "title":"Java后端研发",
#这里插入时,为"20000"也行,会尝试转换为整型
  "salary_min":20000,
  "city":"北京",
  "Company":{
    "name":"百度",
    "address":"北京"
  },
  "pub_date":"2018-10-28"
}
PUT lagou/job/2
{
  "title":"Python分部式爬虫",
  "salary_min":20000,
   "city":"成都",
  "Company":{
    "name":"美团",
    "address":"成都"
  },
  "pub_date":"2018-10-27"
}
PUT lagou/job/3
{
  "title":"前端研发",
  "salary_min":20000,
   "city":"北京",
  "Company":{
    "name":"阿里",
    "address":"北京"
  },
  "pub_date":"2018-10-28"
}

 

   3.获取mapping:

#所有
GET _all/_mapping
#索引为拉钩
GET lagou/_mapping
#索引为lagou,type为job
GET lagou/_mapping/job

 

 五.参考文献:

    https://blog.csdn.net/zhanglh046/article/details/78529208

 

 

 

 

    

 

 

 

以上是关于elasticsearch的映射的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段

EF添加关联的提示问题:映射从第 260 行开始的片段时有问题:

如何使用spring data elasticsearch创建具有指定名称的映射索引?

Python代码阅读(第26篇):将列表映射成字典

Elasticsearch笔记九之优化

九.全文检索ElasticSearch经典入门-ElasticSearch映射修改