ElasticSearch基本使用

kolbe 2021年11月20日 113次浏览

1 索引操作

1.1 创建索引

Request:

PUT /{index_name}

{
  # 配置副本和分片信息等
  "settings": {
    ...
  }, 
  # 配置映射信息
  "mappings": {
    ...
  }
}

Request Sample:

PUT /user
{
  # 设置用户索引的配置信息
  "settings": {
    # 设置分片副本数为2
    "number_of_replicas": 2,
    # 设置主分片数为10,默认为5
    "number_of_shards": 10
  }, 
  # 设置用户索引的映射信息
  "mappings": {
    "properties": {
      # 用户名,类型为text,支持全文检索
      "username": {
        "type": "text"
      },
      # 城市,类型为keyword,支持全匹配检索
      "city": {
        "type": "keyword"
      },
      # 年龄,类型为integer,支持范围检索
      "age": {
        "type": "integer"
      }
    }
  }
}

Response Sample:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "user"
}

1.2 查询索引

Request:GET /

Reuqest Sample: GET /user
Response Sample:

{
  "user" : {
    # 索引别名
    "aliases" : { },
    # 映射信息
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "city" : {
          "type" : "keyword"
        },
        "username" : {
          "type" : "text"
        }
      }
    },
    # 索引配置
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        # 分片数量
        "number_of_shards" : "10",
        "provided_name" : "user",
        "creation_date" : "1638661589644",
        # 分片副本数
        "number_of_replicas" : "2",
        "uuid" : "jUVE_NO0Q-aBgSqtvVp-jQ",
        "version" : {
          "created" : "7100299"
        }
      }
    }
  }
}

1.3 查询所有索引

Request:GET /_cat/indices?v

Response Sample:

health status index uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   user  SL64Wq13S16skPvyeaYO6A   1   1          0            0       416b           208b

1.4 删除索引

Request:DELETE /

Request Sample: DELETE /user
Response Sample:

{
    "acknowledged": true
}

1.5 关闭索引

在有些场景上,如果索引暂时不想用了,又不想删除,防止日后要使用,则可以使用关闭功能
Request: POST //_close

Request Sample: POST /user/_close
Response Sample:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "indices" : {
    "user" : {
      "closed" : true
    }
  }
}

1.5 打开索引

当想要将close状态的索引重新打开时,需要使用索引打开功能
Request: POST /
/_open

Request Sample: POST /user/_open
Response Sample:

{
  "acknowledged" : true,
  "shards_acknowledged" : true
}

2 映射操作

ElasticSearch中的映射指是的数据的组织结构,对应关系型数据库中的表结构概念。

2.1 查看映射

Request: GET //_mapping

Request Sample: GET /user/_mapping
Response Sample:

{
  "user" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "city" : {
          "type" : "keyword"
        },
        "username" : {
          "type" : "text"
        }
      }
    }
  }
}

2.2 扩展映射

当需要变更索引的映射结构时,可以通过扩展映射的方式实现

Request:

POST /{index_name}/_mappping
{
  "properties": {
    "{property_name}": {
      "type": "{property_type}"
    }
  }
}

Request Sample:

POST /user/_mapping
{
  "properties": {
    "nickname": {
      "type": "text"
    }
  }
}

Response Sample:

{
  "acknowledged" : true
}

2.3 数据类型

数据类型类型描述使用场景
keyword不可切分的字符串ES直按使用该字符串建立倒排索引,一般文档的过滤、排序、聚合,查询一般使用term查询
text可切分的字符串ES会按照切词算法对文本进行切分,建议倒排索引,一般用于模糊查询
*number包含long、integer、short、byte、double、float等一般用于数值场景,在应用中应该尽量选择小的类型
boolean代表true或false
date日期类型支持yyyy-MM-dd、yyyyMMdd、yyyyMMddHHmmss、yyyy-MM-ddTHH:mm:ss、yyyy-MM-ddTHH:mm:ss.SSS和yyyy-MM-ddTHH:mm:ss.SSSZ等格式,也支持epoch milis(从1970年1月1日0时到现在的毫秒数)
geo_point地理类型
object对象类型
array数组类型

3 文档操作

3.1 新增文档

1)指定文档的主键
Request:

POST /{index_name}/_doc/{id}
{
  ...
}

2)使用默认的主键
Request:

POST /{index_name}/_doc
{
  ...
}

当不指定文档的主键时,该主键将由ES自动生成

Request Sample:

POST /user/_doc/1
{
  "username": "kolbe",
  "nickname": "kolbet",
  "city": "chengdu",
  "age": 100
}

Response Sample:

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

3.2 批量新增文档