Elasticsearch 初见

启动

双击 bin 目录下的 elasticsearch.bat 文件,等待终端运行成功

索引的增删改查

  • 增(PUT)

    postman 发送请求 PUT 请求:http://127.0.0.1:9200/shopping

    返回结果:

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

    因为 PUT 请求说明接口是幂等性的,所以如果再次进行相同请求,会返回以下数据表示索引已存在:

    {
    "error": {
    "root_cause": [
    {
    "type": "resource_already_exists_exception",
    "reason": "index [shopping/uQ946aIJSwWwaZNTPgPwEw] already exists",
    "index_uuid": "uQ946aIJSwWwaZNTPgPwEw",
    "index": "shopping"
    }
    ],
    "type": "resource_already_exists_exception",
    "reason": "index [shopping/uQ946aIJSwWwaZNTPgPwEw] already exists",
    "index_uuid": "uQ946aIJSwWwaZNTPgPwEw",
    "index": "shopping"
    },
    "status": 400
    }
  • 删(DELETE)

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

    返回数据如下,表示删除成功

    {
    "acknowledged": true
    }
  • 查(GET)

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

    会返回 shopping 这个索引的相关信息:

    {
    "shopping": {
    "aliases": {},
    "mappings": {},
    "settings": {
    "index": {
    "routing": {
    "allocation": {
    "include": {
    "_tier_preference": "data_content"
    }
    }
    },
    "number_of_shards": "1",
    "provided_name": "shopping",
    "creation_date": "1707056309923",
    "number_of_replicas": "1",
    "uuid": "5i7qBmHNSvq5NubfCPyElg",
    "version": {
    "created": "8500008"
    }
    }
    }
    }
    }

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

    会返回所有索引的相关信息,如下:

    health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
    yellow open shopping 5i7qBmHNSvq5NubfCPyElg 1 1 0 0 227b 227b 227b

文档的创建

文档需要在索引的基础上进行创建,所以可以看到,创建文档的请求地址可以是 http://127.0.0.1:9200/shopping/_doc

_doc 就代表文档。等同于数据库中创建数据。

postman 发送 post 请求:http://127.0.0.1:9200/shopping/_doc

但是这么发送请求会报错,因为没有请求体,也就是具体的需要创建的数据:

{
"error": {
"root_cause": [
{
"type": "parse_exception",
"reason": "request body is required"
}
],
"type": "parse_exception",
"reason": "request body is required"
},
"status": 400
}

所以在用 post 发送请求的时候,需要带上请求体:

{
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 3999.0
}

返回数据创建成功数据:

{
"_index": "shopping",
"_id": "QxKDdI0B8aQTV-f6ZJpd",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

但是可以看到上述的返回数据中,_id 是随机的,这是 ES 自动随机生成的,且因为用的是 post 请求,所以接口并不是幂等接口,每次 post 相同接口都可以成功创建文档返回数据,但是返回的 _id 值不同。

当然创建文档也可以自定义 id,使之不适用 ES 自动创建的 id,则可发送类似请求:

http://127.0.0.1:9200/shopping/_doc/100001

返回的数据中,id 就是自定义的 id 了:

{
"_index": "shopping",
"_id": "100001",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}

当然,如果再次发送相同 id 的请求,版本会增加,且操作会变为更新操作:

{
"_index": "shopping",
"_id": "100001",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}

这就是所谓的全量更新。使用 put 请求也可以。

创建文档的请求也同样可以使用另外一种请求方式:http://127.0.0.1:9200/shopping/_create/100002,结果相同。

但如果使用 _create 再次发送相同请求,则会提示已经存在当前 id 数据,文档创建失败:

{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[100002]: version conflict, document already exists (current version [1])",
"index_uuid": "5i7qBmHNSvq5NubfCPyElg",
"shard": "0",
"index": "shopping"
}
],
"type": "version_conflict_engine_exception",
"reason": "[100002]: version conflict, document already exists (current version [1])",
"index_uuid": "5i7qBmHNSvq5NubfCPyElg",
"shard": "0",
"index": "shopping"
},
"status": 409
}

文档的查询

文档的查询也很简单,以刚刚创建文档的数据为例,根据主键(id)进行查询,请求地址:http://127.0.0.1:9200/shopping/_doc/100001

返回结果:

{
"_index": "shopping",
"_id": "100001",
"_version": 2,
"_seq_no": 2,
"_primary_term": 1,
"found": true,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 3999.0
}
}

可以看到 fount 属性为 true,表示查询成功,_source 就表示查询到的数据。

当然,如果查询一个不存在的 id 值,比如发送请求:http://127.0.0.1:9200/shopping/_doc/100012

返回结果:

{
"_index": "shopping",
"_id": "100012",
"found": false
}

fount 属性为 false,表示没有命中请求。

除了使用 id 进行查询之外,还可以使用全数据查询。发送请求:http://127.0.0.1:9200/shopping/_search

返回结果:

{
"took": 63,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "shopping",
"_id": "QxKDdI0B8aQTV-f6ZJpd",
"_score": 1.0,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 3999.0
}
},
{
"_index": "shopping",
"_id": "100001",
"_score": 1.0,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 3999.0
}
},
{
"_index": "shopping",
"_id": "100002",
"_score": 1.0,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 3999.0
}
}
]
}
}

如上,took 是查询的时间,单位为毫秒,timed_out 表示是否超时,hits 就是查询到的数据,一共有三条数据,索引是什么,id 是什么,数据是什么。

文档的修改

全量覆盖

postman 发出一个 PUT 请求:http://127.0.0.1:9200/shopping/_doc/100001,并修改请求体:

{
"title": "小米手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 9999.0
}

返回更新成功结果:

{
"_index": "shopping",
"_id": "100001",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 2
}

再次查看内容已经被成功修改。

局部修改

局部修改因为不是幂等性的所以需要使用 POST 请求,请求地址为:http://127.0.0.1:9200/shopping/_update/100001

请求体为具体需要修改的属性,如:

{
"doc": {
"title": "华为手机"
}
}

返回结果:

{
"_index": "shopping",
"_id": "100001",
"_version": 5,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 2
}

再次查看数据,发送请求:http://127.0.0.1:9200/shopping/_doc/100001

看到数据已经被修改:

{
"_index": "shopping",
"_id": "100001",
"_version": 5,
"_seq_no": 6,
"_primary_term": 2,
"found": true,
"_source": {
"title": "华为手机",
"category": "小米",
"images": "https://www.mi.com/",
"price": 9999.0
}
}

文档的删除

删除比较简单,只需要发送 DELETE 请求,请求地址:http://127.0.0.1:9200/shopping/_doc/100001

返回删除成功数据:

{
"_index": "shopping",
"_id": "100001",
"_version": 6,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 2
}

[Elasticsearc] Elasticsearch 初见的更多相关文章

  1. ElasticSearch+Springboot实际应用:索引同步建设,搜索过程

    1.介绍 springboot框架,众多自动化的部署和约定配置,造成了springboot的着手麻烦,熟练后可以快速快捷进行开发,常用作快捷开发的java底层框架.各位看官都是大神,自行体会.     ...

  2. 【Elasticsearch全文搜索引擎实战】之集群搭建及配置

    文中Elasticsearch版本为6.0.1 1. 环境配置 把环境配置放在第一节来讲,是因为很多人按官网的Getting Started安装运行会有各种错误.其实都是因为一些配置不正确引起的. 首 ...

  3. ElasticSearch无法启动

    安装了ElasticSearch5.5.1后,每次启动服务的时候,都是启动了一下就自动停止了.查看了一下EventViewer, 错误信息如下: Application: elasticsearch. ...

  4. elasticsearch 服务安全配置

    elasticsearch安装与使用(5)-- search guard安装与配置   一.安装search guard插件必须要安装两部分: ①search-guard-xx ②search-gua ...

  5. elasticsearch 基础知识汇总

    索引分片: 从策略层面,控制分片分配的选择 磁盘限额 为了保护节点数据安全,ES 会定时(cluster.info.update.interval,默认 30 秒)检查一下各节点的数据目录磁盘使用情况 ...

  6. elasticsearch安装与使用(5)-- search guard安装与配置

    一.安装search guard插件必须要安装两部分: ①search-guard-xx ②search-guard-ssl (XX指的是与elasticsearch引擎对应的版本) github地址 ...

  7. Elasticsearch架构原理

    架构原理 本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Ela ...

  8. 〈一〉ElasticSearch的介绍

    目录 什么是ElasticSearch 核心能力 ES的搜索核心 搜索引擎选择 搜索的处理 补充: 小节总结: 基本学习环境搭建 如何操作ElasticSearch 下载.安装和运行(Based Wi ...

  9. Flume初见与实践

    Photo by Janke Laskowski on Unsplash 参考书籍:<Flume构建高可用.可扩展的海量日志采集系统> --Hari Shreedharan 著 以下简称& ...

  10. ElasticSearch——Logstash输出到Elasticsearch配置

    位置 在Logstash的.conf配置文件中的output中配置ElasticSearch 示例: output { elasticsearch{ action => "index& ...

随机推荐

  1. maven总结三: 常用插件

    本文为博主原创,转载请注明出处: 目录: 1. maven-release-plugin 2. maven-compiler-plugin 3. maven-assembly-plugin 4. sp ...

  2. wireshark 显示过滤表达式

    转载请注明出处: 1.根据协议过滤: 在显示过滤表达式的输入框中直接输入对应的协议类型即可:http   tcp  udp 2.根据 IP 过滤: 根据源IP地址过滤:如源地址IP为:127.0.0. ...

  3. [转帖]细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4

    https://www.cnblogs.com/malecrab/p/5300503.html 1. Unicode与ISO 10646 全世界很多个国家都在为自己的文字编码,并且互不想通,不同的语言 ...

  4. [转帖]警惕Oracle数据库性能“隐形杀手”——Direct Path Read

    一. 简介 Oracle 的11g版本正式发布到今天已经10年有余,最新版本也已经到了20c,但是Direct Path Read(直接路径读)导致性能问题的案例仍时有发生,很多12c的用户还是经常遇 ...

  5. [转帖]s3fs把 s3-like 对象存储挂载到本地

    s3fs把 s3-like 对象存储挂载到本地 s3fs把 s3-like 对象存储挂载到本地 s3fs-fuse 是一个采用 c++ 开发的开源应用,它的作用是可以将 AWS S3 以及兼容 S3 ...

  6. [转帖]jmeter正则表达式提取器获取数组数据-02篇

    接上篇,当我们正则表达式匹配到多个值以后,入下图所示,匹配到21个结果,如果我们想一次拿到这一组数据怎么办呢 打开正则表达式提取器页面,匹配数字填入-1即可 通过调试取样器就可以看到匹配到已经匹配到多 ...

  7. [转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响

    测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个. 1台客户端:安装fio工具.内核客户端,使用万兆线. 测试目的 针对fio工具中的iodepth(队列深 ...

  8. [转帖]CPU Utilization is Wrong

    Brendan Gregg's Blog home CPU Utilization is Wrong 09 May 2017 The metric we all use for CPU utiliza ...

  9. requests模块安装

    使用python写接口,必不可少的就是requests,所以事先要在python中安装requests     ​一.使用pip install安装(项目的命令行终端使用) 1.配置下载源地址路径(清 ...

  10. kettle(docker版)系列文章01---docker部署

    1.准备好kettle的镜像文件放在指定目录解压 docker image load -i /home/pdi/jztwebspoon.tar 2.起容器 docker run -d -p 7777: ...