零基础学习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的高级查询

相关推荐
m0_748238633 分钟前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
菜鸟阿达1 小时前
spring boot 2.7 + seata +微服务 降级失败问题修复
spring boot·后端·微服务
清河__1 小时前
【Go】十七、grpc 服务的具体功能编写
开发语言·后端·golang
张声录11 小时前
国密算法Sm2工具类--golang实现版
开发语言·后端·golang
一小路一10 小时前
从0-1学习Mysql第五章: 索引与优化
数据库·后端·学习·mysql·面试
mah66610 小时前
SpringBoot项目连接Oracle视图报错整理
spring boot·后端·oracle
IT学长编程10 小时前
计算机毕业设计 基于SpringBoot的智慧社区管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·后端·毕业设计·课程设计·论文笔记·1024程序员节
Asthenia041211 小时前
详细分析 `@@` 和 `${}` 的来源及启动配置
后端
奋斗的小方11 小时前
Springboot基础篇(3):Bean管理
java·spring boot·后端
十二零七12 小时前
掌握 ElasticSearch 精准查询:Term Query 与 Filter 详解
大数据·elasticsearch·搜索引擎