搜索引擎ES--索引、映射及文档操作

目录

索引操作

创建与删除索引库

        创建索引

        删除索引

判断索引是否存在

查看索引

        查看单个索引

        批量查看索引

        查看所有索引

打开与关闭索引

        打开索引

        关闭索引

映射操作

创建映射字段

映射属性详解

查看映射关系

        查看单个索引映射关系

        查看所有索引映射关系

修改索引映射关系

一次性创建索引与映射 

文档操作

新增文档

        新增文档(手动指定id)

        新增文档(自动生成id)

查看单个文档与所有文档

        单个文档

        所有文档

        文档元数据解读

_source(定制返回结果)

更新文档(局部更新与全局更新)

        全部更新

        局部更新

删除文档

        根据id进行删除

        根据查询条件进行删除

        删除所有文档

文档全量替换、强制创建

        全量替换

        强制创建


索引操作

创建与删除索引库

Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求

        创建索引

语法

PUT /索引名称
{
  "settings": {
    "属性名": "属性值"
  }
}

settings:就是索引库设置,其中可以定义索引库的各种属性 比如分片数 副本数等,目前我们可以不设置,都走默认

        删除索引

语法

DELETE /索引名称1,索引名称2,索引名称3...
 

查看索引,显示索引不存在

判断索引是否存在

语法

HEAD /索引名称

 

查看索引

        Get请求可以帮我们查看索引的相关属性信息,格式:

        查看单个索引

语法

GET /索引名称

        批量查看索引

语法

GET /索引名称1,索引名称2,索引名称3,...

        查看所有索引

方式一

GET _all

方式二

GET /_cat/indices?v

绿色:索引的所有分片都正常分配。
黄色:至少有一个副本没有得到正确的分配。
红色:至少有一个主分片没有得到正确的分配。

 

打开与关闭索引

        打开索引

语法

POST /索引名称/_open


        关闭索引

语法

POST /索引名称/_close

映射操作

创建映射字段

语法

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

字段名:任意填写,下面指定许多属性,例如:
        type:类型,可以是text、long、short、date、integer、object等
        index:是否索引,默认为true
        store:是否存储,默认为false
        analyzer:指定分词器

更多属性:

        https://www.elastic.co/guide/en/elasticsearch/reference/7.3/mapping-params.html

示例

PUT /duia-company-index
PUT /duia-company-index/_mapping
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "job": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "logo": {
      "type": "keyword",
      "index": "false"
    },
    "payment": {
      "type": "float"
    }
  }
}

映射属性详解

1) type

Elasticsearch中支持的数据类型非常丰富:

  • String类型,又分两种

       text:可分词,不可参与聚合

       keyword 不可分词,数据会作为完整字段进行匹配,可以参加聚合

  • Numerical

       基本数据类型:long、integer、short、byte、double、float、half_float

       浮点数的高精度类型:scaled_float 需指定一个精度因子,如10或100。es会把真实的值乘以        这个因子后存储,取出时再还原。

  • Date 日期类型

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

  • Array

       进行匹配时,任意一个元素满足,都认为满足。

       排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序。

  • Object 对象
{
    name:"Jack",
    age:21,
    girl:{
        name: "Rose", age:21
    }
}

       如果存储到索引库的是对象类型,例如上面的girl,会把girl变成两个字段:girl.name和girl.age

2) index

       index影响字段的索引情况。

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

               false:字段不会被索引,不能用来搜索

       index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。

       但是有些字段是我们不希望被索引的,比如企业的logo图片地址,需要手动设置index为false

3) store

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

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

4) analyzer

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

 

查看映射关系

        查看单个索引映射关系

语法

GET /索引名称/_mapping

        查看所有索引映射关系

语法

GET _mapping 或 GET _all/_mapping

 

修改索引映射关系

语法

注意:修改映射增加字段 做其它更改只能删除索引 重新建立映射

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

一次性创建索引与映射 

        我们可以在创建索引库的同时,直接制定索引库中的索引,基本语法:

put /索引库名称
{
  "settings": {
    "索引库属性名": "索引库属性值"
  },
  "mappings": {
    "properties": {
      "字段名": {
        "映射属性名": "映射属性值"
      }
    }
  }
}

       案例

PUT /lagou-employee-index
{
  "settings": {},
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

文档操作

新增文档

新增文档时,涉及到id的创建方式,手动指定或者自动生成。

        新增文档(手动指定id)

语法

POST /索引名称/_doc/{id}

POST /lagou-company-index/_doc/1
{
  "name": "百度",
  "job": "小度用户运营经理",
  "payment": "30000",
  "logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbU AABJB7x9sm8374.png"
}

        新增文档(自动生成id)

语法

POST /索引名称/_doc

POST /lagou-company-index/_doc
{
  "field": "value"
}

 

查看单个文档与所有文档

        单个文档

语法

GET /索引名称/_doc/{id}

GET /lagou-company-index/_doc/{id}

        所有文档

语法 

POST /索引名称/_search
{
  "query": {
    "match_all": {}
  }
}

        文档元数据解读

元数据项
含义
_index
document 所属 index
_type
document 所属 type Elasticsearch7.x 默认 type _doc
_id
代表 document 的唯一标识,与 index type 一起,可以唯一标识和定位一个 document
_version
document 的版本号, Elasticsearch 利用 _version ( 版本号 ) 的方式来确保应用中相互冲突的变更不会导致数据丢失。需要修改数据时,需要指定想要修改文档的version 号,如果该版本不是当前版本号,请求将会失败
_seq_no
严格递增的顺序号,每个文档一个, Shard 级别严格递增,保证后写入的 Doc   seq_no 大于先写入的 Doc seq_no
_primary_term
任何类型的写操作,包括 index create update Delete ,都会生成一个 _seq_no。
found
true/false ,是否查找到文档
_source
存储原始文档

_source(定制返回结果)

某些业务场景下,我们不需要搜索引擎返回source中的所有字段,可以使用source进行定制,如下,多个字段之间使用逗号分隔

语法

GET /索引名称/_doc/{id}?_source=name1,name2,......

 

更新文档(局部更新与全局更新)

Elasticsearch可以使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档已经存在,则执行更新操作。

注意:Elasticsearch执行全部更新操作的时候,Elasticsearch首先将旧的文档标记为删除状态,然后添加新的文档,旧的文档不会立即消失,但是你也无法访问,Elasticsearch会在你继续添加更多数据的时候在后台清理已经标记为删除状态的文档。

全部更新,是直接把之前的老数据,标记为删除状态,然后,再添加一条更新的(使用PUT或者 POST)

局域更新,只是修改某个字段(使用POST)

        全部更新

将刚才新增的请求方式改为PUT,就是修改,不过修改必须指定id

  • id对应文档存在,则修改
  • id对应文档不存在,则新增

比如,我们把使用id为3,不存在,则是新增

可以看到是 created 新增。把数据改一下,再次执行刚才的请求

可以看到结果是: updated 更新数据

        局部更新

语法

POST /索引名/_update/{id}
{ 
  "doc":{ 
    "field":"value" 
  } 
}

删除文档

        根据id进行删除

语法

DELETE /索引名/_doc/{id} 

 

        根据查询条件进行删除

语法

POST /索引库名/_delete_by_query
{
  "query": {
    "match": {
      "字段名": "搜索关键字"
    }
  }
}

 

 

        删除所有文档

语法

POST 索引名/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

文档全量替换、强制创建

        全量替换

        语法与创建文档一样,如果文档id不存在,则创建;如果文档id已经存在,就是全量替换操作,替换文档的json串内容;

        文档是不可变的,如果要修改文档的内容,第一种方式就是全量替换,直接对文档重新建立
索引,替换里面所有的内容,elasticsearch会将老的文档标记为deleted,然后新增我们给定的一个文档,当我们创建越来越多的文档的时候,elasticsearch会在适当的时机在后台自动删除标记为deleted的文档 。

        强制创建

语法

PUT /lagou-company-index/_doc/4?op_type=create
{}

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值