数据库:一文掌握 Elasticsearch 的各种指令(Elasticsearch指令备忘)

文章目录

这是 Elasticsearch 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。

入门

Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。

下载

注意: ${VERSION} 需替换为指定版本,官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。

Windows
复制代码
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip
linux
shell 复制代码
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512

$ shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512 

$ tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz

$ cd elasticsearch-${VERSION}/
macos
shell 复制代码
$ curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz

$ curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - 

$ tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz

$ cd elasticsearch-${VERSION}/ 

启动

  • 启动 Elasticsearch

    shell 复制代码
    $ ./bin/elasticsearch
  • 设置密码

    shell 复制代码
    export ELASTIC_PASSWORD="your_password"
  • 测试是否启动成功

    shell 复制代码
    curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 
  • 成功则返回样例如下:

    json 复制代码
    {
        "name" : "Cp8oag6",
        "cluster_name" : "elasticsearch",
        "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
        "version" : {
            "number" : "${VERSION}",
            "build_type" : "tar",
            "build_hash" : "f27399d",
            "build_flavor" : "default",
            "build_date" : "2016-03-30T09:51:41.449Z",
            "build_snapshot" : false,
            "lucene_version" : "9.10.0",
            "minimum_wire_compatibility_version" : "1.2.3",
            "minimum_index_compatibility_version" : "1.2.3"
        },
        "tagline" : "You Know, for Search"
    }

Elasticsearch 和 RDMS 的对比

RDMS elasticsearch
数据库(database) 索引(index)
表(table) 类型(type)
行(row) 文档(document)
列(column) 字段(field)
表结构 映射
索引 全文索引
SQL 查询DSL
SELECT * FROM tablename GET http://...
UPDATE table SET PUT http://...
DELETE DELETE http://...

操作

基础语法规则

shell 复制代码
$ curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
  • VERB HTTP 方法:GET, POST, PUT, HEAD, DELETE
  • PROTOCOL:http 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用)
  • HOST:Elasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost
  • PORT:Elasticsearch HTTP 服务所在的端口,默认为 9200
  • PATH API 路径(例如_count 将返回集群中文档的数量),PATH:可以包含多个组件,例如_cluster/stats 或者_nodes/stats/jvm
  • QUERY_STRING:一些可选的查询请求参数,例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
  • BODY:一个 JSON 格式的请求主体(如果请求需要的话)

创建索引

统一请求 api 前缀
复制代码
http://localhost:9200/
DSL语法
json 复制代码
PUT /user_info
{
  "settings": { "number_of_replicas": 1, "number_of_shards": 1 },
  "mappings": {
    "properties": {
      "id": { "type": "long", "index": true },
      "username": { "type": "keyword", "index": true },
      "nickname": { "type": "keyword", "index": true },
      "password": { "type": "keyword", "index": false },
      "age": { "type": "integer", "index": true },
      "info": { "type": "text", "index": true },
      "remark": { "type": "text", "index": true }
    }
  }
}
curl
shell 复制代码
curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }'
参数说明
  • settings: 设置索引的信息
  • number_of_shards: 每个索引的主分片数,一旦索引创建后,无法修改此配置
  • number_of_replicas: 每个主分片的副本数,此配置可随时修改
  • mappings: 索引映射定义
  • properties: 字段定义。使用 JSON 配置,键为字段名称(自定义),值为嵌套 JSON,其中 type 指定字段的类型

其他参数很多,请参考官网资料

删除索引

DSL语法
http 复制代码
DELETE /user_info
curl
shell 复制代码
curl -XDELETE "http://localhost:9200/user_info"

判断索引是否存在

DSL语法
http 复制代码
# 查看索引是否存在
HEAD /user_info
curl
shell 复制代码
# 查看索引是否存在
curl -XHEAD "http://localhost:9200/user_info"

开启/关闭索引

开启DSL语法
shell 复制代码
POST /user_info/_open

curl

shell 复制代码
curl -XPOST "http://localhost:9200/user_info/_open"
关闭 DSL 语法
shell 复制代码
POST /user_info/_close

curl

shell 复制代码
curl -XPOST "http://localhost:9200/user_info/_close"

索引的别名

  • 添加别名 DSL 语法
shell 复制代码
POST /user_info/_alias/user1
shell 复制代码
curl -XPOST "http://localhost:9200/user_info/_alias/user1"
  • 删除别名DSL语法
shell 复制代码
DELETE /user_info/_alias/user1
shell 复制代码
curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
  • 查看别名DSL语法
shell 复制代码
GET /_alias/user1
shell 复制代码
curl -XGET "http://localhost:9200/_alias/useraa"

Mapping 操作

类似修改数据库中列的操作

查看 mapping

DSL语法
shell 复制代码
GET /user_info/_mapping

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_mapping"

新增 mapping

DSL语法
shell 复制代码
PUT /user_info/_mapping
{
    "properties":{
        "sex":{ "type":"keyword" }
    }
}

shell 复制代码
curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }'

注意: 需要注意的是字段映射只能增加,不能更改删除

文档的操作

添加文档

新增一条数据 - DSL语法
shell 复制代码
POST /user_info/_doc/1
{
    "id":1,
    "username":"username",
    "password":"123456",
    "nickname":"nickname",
    "age":18,
    "info":"一些个人相关的介绍",
    "remark":"备注信息",
    "sex":"男"
}

shell 复制代码
curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }'

查询指定索引的所有文档

类似数据库中的 select * from user_info;

DSL语法
json 复制代码
GET /user_info/_search
{
    "query": {
        "match_all": {}
    }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }'

通过 id 查询文档

类似数据库中的 select * from user_info where id = 1;

DSL语法
shell 复制代码
GET /user_info/_doc/1

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_doc/1"

模糊查找

类似数据库中的模糊查询 select * from user_info where info like '%人%';

DSL语法
json 复制代码
GET /user_info/_search
{
    "query": { "match": { "info": "人" } }
}

通过条件查询文档

类似数据库中的 select * from user_info where username = 'username';

通过条件查询 - DSL语法
json 复制代码
GET /user_info/_search
{
    "query": {
        "bool": {
            "must": [ { "term": { "username": "username" } } ]
        }
    }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'

范围查找

类似数据库中的范围查询 select * from user_info where age between 18 and 30;

DSL语法
json 复制代码
GET /user_info/_search
{
    "query": {
        "range": {
            "age": {
                "gt": 18,
                "lt": 30
            }
        }
    }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }'

and 查询

类似数据库中的 and 查询 select * from user_info where age > 18 and sex = '男';

DSL语法
json 复制代码
GET /user_info/_search  
{  
  "query": {
    "bool": {
      "must": [
        { "range": { "age": { "gt": 18 } } },
        { "term": { "sex": "男" } }
      ]   
    }
  }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }'

limit 查找

类似数据库中的 limit 查询 select * from user_info limit 10;

DSL语法
json 复制代码
GET /user_info/_search  
{  
    "size": 10,  
    "query": {  
        "match_all": {}     
    }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'

limit offset 查找

类似数据库中的 limit 查询 select * from user_info limit 0,10;

DSL语法
http 复制代码
GET /user_info/_search  
{  
    "size": 2,  
    "from": 1,  
    "query": {  
        "match_all": {}  
    }  
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
参数说明
  • size: 10 表示我们想要返回的结果数量是10条
  • from: 20 表示我们想要从结果集中的第21条记录开始返回(因为偏移是从0开始的)
  • query: {"match_all": {}} 是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果

or 查询

类似数据库中的 or 查询 select * from user_info where age > 18 or sex = '男';

DSL语法
json 复制代码
GET /user_info/_search
{
    "query": {
        "bool": {
        "should": [
            {
                "range": {
                    "age": { "gt": 18 }
                }
            },
            {
                "term": { "sex": "男" }
            }
        ]
        }
    }
}

shell 复制代码
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }'

删除文档

删除指定 id

类似数据库中的 delete 查询 delete from user_info where id = 3;

DSL语法
shell 复制代码
# 删除文档
DELETE /user_info/_doc/3

shell 复制代码
# 删除文档
curl -XDELETE "http://localhost:9200/user_info/_doc/3"

删除指定条件

类似数据库中的 delete 查询 delete from user_info where age > 18;

DSL语法
json 复制代码
POST /user_info/_delete_by_query
{
    "query": {
        "range": { "age": { "gt": 18 } }
    }
}

shell 复制代码
curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
相关推荐
倔强的石头_6 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
Elasticsearch1 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Elasticsearch2 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端