零基础学习Elasticsearch系列【一】

零基础学习Elasticsearch系列【一】

一、介绍

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行

二、下载启动

下载地址:www.elastic.co/cn/download...

作者选择的是7.8.0 版本,windows版本

下载后,解压即安装

目录 含义
bin 可执行脚本目录
config 配置目录
jdk 内置 JDK
lib 类库
logs 日志目录
modules 模块目录
plugins 插件目录

解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

错误解决

csharp 复制代码
ElasticsearchException[X-Pack is not supported and Machine Learning is not available for [windows-x86]; you can use the other X-Pack features (unsupported) by setting xpack.ml.enabled: false in elasticsearch.yml]
​

意思是X-Pack不受我当前的win系统支持,需要在elasticsearch.yml文件中添加配置

yaml 复制代码
xpack.ml.enabled: false

添加后,重新点击启动,正常启动,访问 http://127.0.0.1:9200/,可以看到版本信息

json 复制代码
{
"name": "DESKTOP-HO4UMF5",
"cluster_name": "elasticsearch",
"cluster_uuid": "XAP5wJguQrqkL7jZo-SBjA",
"version": {
"number": "7.8.0",
"build_flavor": "default",
"build_type": "zip",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

三、 Elasticsearch 基本操作

使用postman进行接口调用,Postman 下载:www.getpostman.com/apps

1. 索引操作

  • 创建索引

    PUT 请求 :http://127.0.0.1:9200/shopping

    请求后,服务器返回响应

    json 复制代码
    {
        "acknowledged": true,
        "shards_acknowledged": true,
        "index": "shopping"
    }

    这样我们就创建了一个索引名称为 shopping 的索引,创建索引库的分片数默认 1 片,创建索引库的分片数默认 1 片

    如果重复添加索引,会返回错误信息,如下:

    json 复制代码
    {
        "error": {
            "root_cause": [
                {
                    "type": "resource_already_exists_exception",
                    "reason": "index [shopping/dOLlIokkTNqyiOWUm3f_-w] already exists",
                    "index_uuid": "dOLlIokkTNqyiOWUm3f_-w",
                    "index": "shopping"
                }
            ],
            "type": "resource_already_exists_exception",
            "reason": "index [shopping/dOLlIokkTNqyiOWUm3f_-w] already exists",
            "index_uuid": "dOLlIokkTNqyiOWUm3f_-w",
            "index": "shopping"
        },
        "status": 400
    }
  • 查看所有索引

    GET 请求 :http://127.0.0.1:9200/_cat/indices?v

sql 复制代码
这里的_cat 表示查看的意思,indices 表示索引,类似mysql的show tables
  • 查看单个索引

    发 GET 请求 :http://127.0.0.1:9200/shopping

    服务器响应结果如下:

    json 复制代码
    {
        "shopping": {
            "aliases": {},
            "mappings": {},
            "settings": {
                "index": {
                    "creation_date": "1693964363636",
                    "number_of_shards": "1",
                    "number_of_replicas": "1",
                    "uuid": "dOLlIokkTNqyiOWUm3f_-w",
                    "version": {
                        "created": "7080099"
                    },
                    "provided_name": "shopping"
                }
            }
        }
    }
  • 删除索引

    发 DELETE 请求 :http://127.0.0.1:9200/shopping

    返回如下:

    json 复制代码
    {
        "acknowledged": true
    }

2. 文档操作

  • 创建文档

    向 ES 服务器发 POST 请求http://127.0.0.1:9200/shopping/_doc

    请求类型为json,在postman中,选择 row,然后选择json

    内容为:

    json 复制代码
    {
     "title":"小米手机",
     "category":"小米",
     "images":"http://www.test.com/xm.jpg",
     "price":3999.00
    }

    响应结果如下:

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 1,
        "result": "created",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 0,
        "_primary_term": 1
    }
ruby 复制代码
唯一性标识(ID)在未指定的情况下,服务器会自动生成一个,如果需要指定的话,需要在请求时,在url最后拼接上,如下:

<http://127.0.0.1:9200/shopping/_doc/123>
  • 查看文档

    向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping/_doc/x69YaIoBQf-e3AB8iXge

    响应结果如下:

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 1,
        "_seq_no": 0,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "title": "小米手机",
            "category": "小米",
            "images": "http://www.test.com/xm.jpg",
            "price": 3999.00
        }
    }
  • 修改文档

    向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc/x69YaIoBQf-e3AB8iXge

    请求体内容为:

    json 复制代码
    {
     "title":"华为手机",
     "category":"华为",
     "images":"http://www.gulixueyuan.com/hw.jpg",
     "price":4999.00
    }

    服务器响应结果:

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 2,
        "result": "updated",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 1,
        "_primary_term": 1
    }

    我们将这条记录改为了华为,版本号变成了2

  • 修改字段

    修改数据时,也可以只修改某一个字段

    发 POST 请求 :http://127.0.0.1:9200/shopping/_update/x69YaIoBQf-e3AB8iXge

    请求体内容为:

    json 复制代码
    { 
     "doc": {
     "price":3000.00
     } 
    }

    响应结果为:

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 3,
        "result": "updated",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 2,
        "_primary_term": 1
    }

    根据id再次查询文档,get 请求:http://127.0.0.1:9200/shopping/_doc/x69YaIoBQf-e3AB8iXge

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 3,
        "_seq_no": 2,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "title": "华为手机",
            "category": "华为",
            "images": "http://www.test.com/hw.jpg",
            "price": 3000.0
        }
    }

    可以看到,价格已经变成了3000.0

  • 删除文档

    删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)

    发 DELETE 请求 :http://127.0.0.1:9200/shopping/_doc/x69YaIoBQf-e3AB8iXge

    响应如下:

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "_version": 4,
        "result": "deleted",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 3,
        "_primary_term": 1
    }

    这里显示版本号为4,对文档的所有操作都会更新版本号

    删除后,再次查询文档

    json 复制代码
    {
        "_index": "shopping",
        "_type": "_doc",
        "_id": "x69YaIoBQf-e3AB8iXge",
        "found": false
    }
  • 条件删除索引

    1. 首先往索引中增加两条数据,id分别为1,2

      put请求

      json 复制代码
      {
       "title":"小米手机",
       "category":"小米",
       "images":"http://www.gulixueyuan.com/xm.jpg",
       "price":4000.00
      }
      ​
      ​
      {
       "title":"华为手机",
       "category":"华为",
       "images":"http://www.gulixueyuan.com/hw.jpg",
       "price":4000.00
      }
      ​
    2. 要删除价格为4000.00的数据

    3. 向 ES 服务器发 POST 请求

      请求:http://127.0.0.1:9200/shopping/_delete_by_query

      请求体:

      json 复制代码
      {
       "query":{
       "match":{
       "price":4000.00
       }
       }
      }
    4. 响应结果

      json 复制代码
      {
          "took": 366,
          "timed_out": false,
          "total": 2,
          "deleted": 2,
          "batches": 1,
          "version_conflicts": 0,
          "noops": 0,
          "retries": {
              "bulk": 0,
              "search": 0
          },
          "throttled_millis": 0,
          "requests_per_second": -1.0,
          "throttled_until_millis": 0,
          "failures": []
      }

      响应结果显示,删除了两条

四、 总结

通过以上的学习,已经掌握了es的基本操作,对索引,文档的增删改查等。这些远远不够,具体使用es的过程中会遇到各种各样的问题,只有遇到了才能提高,下一篇将介绍es的高级查询

相关推荐
Elastic 中国社区官方博客几秒前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
许野平1 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
LunarCod3 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。3 小时前
Spring Boot 配置文件
java·spring boot·后端
杜杜的man4 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*4 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu4 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s4 小时前
Golang--协程和管道
开发语言·后端·golang
为什么这亚子4 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算