Elasticsearch索引库、类型与文档

目录

索引库

创建索引库

查看索引库

删除索引库

类型及映射

创建映射字段

属性说明

type

index

store

查看映射关系

文档

新增文档

查看文档

修改文档

删除文档


索引库

创建索引库

PUT /shop
{
  "settings": {
    "属性名": "属性值"
  }
}

查看索引库

GET /shop

删除索引库

DELETE /shop

类型及映射

有了索引库,等于有了数据库中的database。接下来就需要索引库中的类型了,也就是数据库中的。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做字段映射(mapping) 。

字段的约束包括但不限于:

  • 字段的数据类型
  • 是否要存储
  • 是否要索引
  • 是否分词
  • 分词器是什么

创建映射字段

语法格式:

PUT /索引库名/_mapping/类型名称
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

属性说明

type

type为字段的数据类型,下面列出了几种最为常见的类型。

  • String类型,又分两种:

    • text:可分词,不可参与聚合;
    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合。
  • Numerical:数值类型,分两类:

    • 基本数据类型:long、interger、short、byte、double、float、half_float;

    • 浮点数的高精度类型:scaled_float。

      • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  • Date:日期类型

    elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

  • Array:数组类型

    • 进行匹配时,任意一个元素满足,都认为满足;
    • 排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序。
  • Object:对象

{
    id: 123,
    price: 25.5,
    goods:{
        name: "apple", 
        amount: 5
    }
}

如果存储到索引库的是对象类型,例如上面的goods,会把goods编程两个字段:goods.name和goods.amount

index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索。默认值就是true;
  • false:字段不会被索引,不能用来搜索。

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

store

是否将数据进行独立存储。

原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。

事例:

PUT /shop/_mapping/goods
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "subtitle": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images": {
      "type": "keyword",
      "index": "false"
    },
    "price": {
      "type": "float"
    }
  }
}

查看映射关系

GET /shop/_mapping/goods

响应结果:

Elasticsearch索引库、类型与文档_第1张图片


文档

新增文档

如果文档没有唯一属性字段,可以通过POST方式新增,es会为文档生成唯一的uuid。

POST /shop/goods
{
    "title":"香蕉",
    "images":"http://image.xxx.com/123411.jpg",
    "price":3.12
}

结果:

{
  "_index" : "shop",
  "_type" : "goods",
  "_id" : "-yxENHQBsVejmPWpWQ2w",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

如果需要用自定义id进行新增文档,可以使用PUT方式:

POST /shop/goods/3
{
    "title":"西瓜",
    "images":"http://image.xxx.com/435252.jpg",
    "price":15.60
}

结果:

{
  "_index" : "shop",
  "_type" : "goods",
  "_id" : "3",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

查看文档

根据id查看指定文档:

GET /shop/goods/-yxENHQBsVejmPWpWQ2w

结果:

{
  "_index" : "shop",
  "_type" : "goods",
  "_id" : "-yxENHQBsVejmPWpWQ2w",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "香蕉",
    "images" : "http://image.xxx.com/123411.jpg",
    "price" : 3.12
  }
}

修改文档

通过PUT方式,必须指定id,如果id存在则进行修改, 不存在则进行新增。

PUT /shop/goods/3
{
    "title":"西瓜1",
    "images":"http://image.xxx.com/435252.jpg",
    "price":12.60
}

结果:

如果是新增,result结果为created,更新则为updated,每更新一次,version + 1。 

{
  "_index" : "shop",
  "_type" : "goods",
  "_id" : "3",
  "_version" : 4,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

删除文档

根据id进行删除:

DELETE /shop/goods/3

删除所有数据:

POST shop/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

 

你可能感兴趣的:(Elasticsearch)