elasticSearch基础

182 阅读5分钟

es基础概念

Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

index(索引)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

type(类型)(7x之后被删除,本文不会使用)

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

Filed(字段)

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识 。

mapping(映射)

mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

document(文档)

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。在一个index里面,你可以存储任意多的文档。

es基础操作

信息查看

1、查看集群健康状态
GET /_cat/health?v
2、查看节点状态
GET /_cat/nodes?v
3、查看所有索引信息
GET /_cat/indices?v

索引操作

mapping说明

mapping是对索引库中文档的约束,常见的mapping属性包括

  1. type:字段数据类型,常见的简单类型有:
    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)【keyword类型只能整体搜索,不支持搜索部分内容】
    • 数值:long、integer、short、byte、double、float
    • 布尔:boolean
    • 日期:date
    • 对象:object
  2. index:是否创建索引,默认为true
  3. analyzer:使用哪种分词器
  4. properties:该字段的子字段
创建索引

需要定义索引的设置和映射。设置包括索引的级别配置,如分片数、副本数等;映射则定义了索引中字段的类型、属性等。

PUT /users
{
    "settings": {
        "number_of_shards": 3,     # 分片数
        "number_of_replicas": 1    # 副本数
    },
    "mappings": {
        "properties": {
            "WorkNo": {
                "type": "keyword",
                "ignore_above": 64  # ignore_above属性(默认是10) ,表示最大的字段值长度,超出这个长度的字段将不会被索引,但是会存储
            },
            "UserName": {
                "type": "text",
                "analyzer": "ik_smart",            # 索引分词
                "search_analyzer": "ik_max_word"   # 搜索分词
            }
        }
    }
}
查询索引
GET /users
 
#返回索引内容
修改索引

这里的修改是只能增加新的字段到mapping中。倒排索引结构一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping。虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。

语法:

PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}

请求示例:

PUT /users/_mapping
{
  "properties": {
    "UserPwd":{
      "type": "keyword"
    }
  }
}
删除索引
DELETE /users

文档操作

新增文档

语法:

 
# 注意: 如果不传文档id,系统会默认生成一个id,请求头示例为:POST /索引库名/_doc
 
POST /索引库名/_doc/文档id
{
    "WorkNo": "值1",
    "UserName": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}

请求示例:

POST /users/_doc/1
{
  "WorkNo": "001",
  "UserName": "张三",
  "UserPwd": "121221"
}
查询文档

语法:

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

# 批量查询:查询该索引库下的全部文档
GET /{索引库名称}/_search
删除文档
DELETE /{索引库名}/_doc/id值
修改文档

全量修改

全量修改是覆盖原来的文档,其本质是 根据指定的id删除文档 新增一个相同id的文档。注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。

PUT /{索引库名}/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}
 

增量修改

增量修改是只修改指定id匹配的文档中的部分字段。

POST /{索引库名}/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}