ElasticSearch系列二:掌握ES索引和Mapping

一、索引

ES会自动建立index和type,不需要提前创建,而且es默认会对document每个field都建立倒排索引。

查看所有索引:GET /_cat/indices?v

1.创建索引示例
PUT /my_index
{
  "settings": {
"number_of_shards": 1,
"number_of_replicas": 0
  },
  "mappings": {
"my_type": {
 "properties": {
"my_field": {
 "type": "text"
}
 }
}
  }
}
2.删除索引示例
DELETE /my_index
DELETE /index_one,index_two
DELETE /index_*
DELETE /_all
3.修改索引示例
PUT /my_index/_settings
{
"number_of_replicas": 1
}
二、ES的元数据
1. _index元数据
a.代表一个document存放在哪个index中
b.类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的index里面,比如说company index,不合适的。
c.index中包含了很多类似的document,就是说这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
d.索引名称必须是小写的,不能用下划线开头,不能包含逗号
2. _type元数据
a.代表document属于index中的哪个类别(type)
b.一个索引通常会划分为多个type,逻辑上对index中有些许不同的几类数据进行分类:因为一批相同的数据,可能有很多相同的fields,但是还是可能会有一些轻微的不同,可能会有少数fields是不一样的,举个例子,就比如说,商品,可能划分为电子商品,生鲜商品,日化商品,等等。
c.type名称可以是大写或者小写,但是同时不能用下划线开头,不能包含逗号
3. _id元数据
a.代表document的唯一标识,与index和type一起,可以唯一标识和定位一个document
b.两种生成方法,第一种手动指定document的id(put /index/type/id),第二种以由es自动为我们创建id(长度为20个字符,URL安全,base64编码,GUID算法,保证分布式系统并行生成时不会发生冲突)
4. _source元数据
a.定制返回的结果,指定_source中,返回哪些field
例:GET /test_index/test_type/1?_source=test_field1,test_field2
三、mapping
1.概述:
①自动或手动为index中的type建立的一种数据结构和相关配置,简称为mapping。
②可以在创建数据之前,手动先创建index和type,以及type对应的mapping,但是不能修改mapping。
③dynamic mapping,自动为我们建立index、type,以及type对应的mapping。
③mapping中包含了每个field对应的数据类型,以及如何分词等设置。
④不同的数据类型(比如说date和text),可能有的是exact value,有的是full text。
⑤mapping就是index的type的元数据,每个type都有一个自己的mapping,决定了数据类型,建立倒排索引的行为,进行搜索的行为。
⑥exact value,在建立倒排索引的时候,分词的时候,是将整个值一起作为一个关键词建立到倒排索引中的;full text,会经历各种各样的处理,分词,normaliztion(时态转换,同义词转换,大小写转换),才会建立到倒排索引中。
2.查看mapping
语法:GET /index/_mapping/type
示例:GET /website/_mapping/article
3.创建mapping示例
PUT /website
{
  "mappings": {
    "article":{
      "properties": {
        "authorId":{
          "type": "long"
        },
        "title":{
          "type": "text",
          "fields": {
            "keyword":{
              "type": "keyword",
              "ignore_above": 50
            }
          }
        },
        "postDate":{
          "type": "date"
        }
      }
    }
  }
}
4.mapping的常用字段类型
string(5.0版本后拆分成两种数据类型text和keyword)
byte,short,integer,long
float,double
boolean
date
5.定制dynamic mapping策略
PUT /my_index
{
  "mappings": {
"my_type": {
 "dynamic": "strict",
 "properties": {
"title": {
 "type": "text"
},
"address": {
 "type": "object",
 "dynamic": "true"
}
 }
}
  }
}
true:默认,遇到陌生字段,就进行dynamic mapping
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值