首页 > 技术文章 > 索引操作

yyyzyyyz 2021-12-16 17:53 原文

三、索引操作

索引就相当于关系型数据库的database。

1 新建索引

直接向ES服务器发出 PUT 请求,新建索引:

PUT foo 
{
  "settings": {
    "index":{
      "number_of_shards":5,
      "number_of_replicas":1
    }
  }
}

上面代码创建一个名为foo的索引。其中,参数number_of_shards表示分片个数,默认是5个分片,创建后不可修改,number_of_replicas是每个分片创建几个副本,默认是1个副本,可以后续修改。

收到如下响应说明创建成功:

image-20211215234849765

2 查询索引

#查询foo索引的配置信息
GET foo/_settings
#获取所有索引的配置信息
GET _all/_settings
#或者
GET _settings
#获取foo和abc索引的配置信息
GET foo,abc/_settings

3 更新索引

#修改foo索引的副本数量为2
PUT foo/_settings
{
  "number_of_replicas": 2
}

如果出现cluster_block_exception错误,这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only。解决方法:磁盘扩容,或者放开索引只读设置

PUT  _all/_settings
{
"index": {
  "blocks": {
    "read_only_allow_delete": false
    }
  }
}

4 删除索引

#删除foo索引
DELETE foo

四、映射与文档操作

索引创建之后,等于有了关系型数据库中的database。Type相当于关系型数据库的表, 在5.x及以前创建的索引可以有多个Type, 在Elasticsearch 6.x以后创建一个索引只有一个Type,但是仍然兼容以前版本。7.x之后取消了索引type类型的设置,不允许指定类型,默认为_doc,并且不兼容旧版本多个Type。但字段仍然是有的,我们需要设置字段的约束信息,叫做字段映射(mapping)。

1 数据类型

string类型:text,keyword

数字类型:long,integer,short,byte,double,float

日期类型:date

布尔类型:boolean

binary类型:binary

复杂类型:object(实体,对象),nested(列表)

geo类型:geo-point,geo-shape(地理位置)

专业类型:ip,competion(搜索建议)

2 映射参数

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

3 创建映射

PUT books
{
  "mappings": {
    "properties":{
      "title":{
        "type":"text",
        "analyzer": "ik_max_word"
      },
      "price":{
        "type":"integer"
      },
      "address":{
        "type":"keyword"
      },
      "company":{
        "properties":{
          "name":{"type":"text"},
          "company_addr":{"type":"text"},
          "employee_count":{"type":"integer"}
        }
      },
      "publish_date":{"type":"date","format":"yyy-MM-dd"}
      
    }
    
  }
}

我们处理中文一般会选择ik分词器ik_max_word

推荐阅读