[Elasticsearc] Elasticsearch 初见
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 初见的更多相关文章
- ElasticSearch+Springboot实际应用:索引同步建设,搜索过程
		1.介绍 springboot框架,众多自动化的部署和约定配置,造成了springboot的着手麻烦,熟练后可以快速快捷进行开发,常用作快捷开发的java底层框架.各位看官都是大神,自行体会. ... 
- 【Elasticsearch全文搜索引擎实战】之集群搭建及配置
		文中Elasticsearch版本为6.0.1 1. 环境配置 把环境配置放在第一节来讲,是因为很多人按官网的Getting Started安装运行会有各种错误.其实都是因为一些配置不正确引起的. 首 ... 
- ElasticSearch无法启动
		安装了ElasticSearch5.5.1后,每次启动服务的时候,都是启动了一下就自动停止了.查看了一下EventViewer, 错误信息如下: Application: elasticsearch. ... 
- elasticsearch 服务安全配置
		elasticsearch安装与使用(5)-- search guard安装与配置 一.安装search guard插件必须要安装两部分: ①search-guard-xx ②search-gua ... 
- elasticsearch 基础知识汇总
		索引分片: 从策略层面,控制分片分配的选择 磁盘限额 为了保护节点数据安全,ES 会定时(cluster.info.update.interval,默认 30 秒)检查一下各节点的数据目录磁盘使用情况 ... 
- elasticsearch安装与使用(5)-- search guard安装与配置
		一.安装search guard插件必须要安装两部分: ①search-guard-xx ②search-guard-ssl (XX指的是与elasticsearch引擎对应的版本) github地址 ... 
- Elasticsearch架构原理
		架构原理 本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Ela ... 
- 〈一〉ElasticSearch的介绍
		目录 什么是ElasticSearch 核心能力 ES的搜索核心 搜索引擎选择 搜索的处理 补充: 小节总结: 基本学习环境搭建 如何操作ElasticSearch 下载.安装和运行(Based Wi ... 
- Flume初见与实践
		Photo by Janke Laskowski on Unsplash 参考书籍:<Flume构建高可用.可扩展的海量日志采集系统> --Hari Shreedharan 著 以下简称& ... 
- ElasticSearch——Logstash输出到Elasticsearch配置
		位置 在Logstash的.conf配置文件中的output中配置ElasticSearch 示例: output { elasticsearch{ action => "index& ... 
随机推荐
- ASP.NET Core 5.0 MVC 视图组件的用法
			什么是视图组件 视图组件与分部视图类似,但它们的功能更加强大. 视图组件不使用模型绑定,并且仅依赖调用时提供的数据.它也适用于 Razor 页. 视图组件: 呈现一个区块而不是整个响应. 包括控制器和 ... 
- 【scikit-learn基础】--『监督学习』之 空间聚类
			空间聚类算法是数据挖掘和机器学习领域中的一种重要技术. 本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期.随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注.其中, ... 
- Navicat平替工具,一款免费开源的通用数据库工具
			前言 前段时间有小伙伴在群里提问说:因为公司不允许使用破解版的Navicat,有好用的Navicat平替工具推荐吗?今天分享一款免费开源的通用数据库工具:DBeaver. 工具介绍 DBeaver是一 ... 
- Apache ShardingSphere 实现分库分表及读写分离
			本文为博主原创,未经允许不得转载: 项目demo 源码地址:https://gitee.com/xiangbaxiang/apache-shardingjdbc 1. 创建Maven项目,并配置 po ... 
- Java 如何将Excel转换为TXT文本格式
			TXT文件是一种非常简单.通用且易于处理的文本格式.在处理大规模数据时,将Excel转为TXT纯文本文件可以提高处理效率.此外,许多编程语言和数据处理工具都有内置的函数和库来读取和处理TXT文件,因此 ... 
- SD-Host控制器设计架构
			SD Host功能列表 SD Host挂接在SoC中,与外部的SD card进行交互 有控制寄存器和状态寄存器,SoC往往有CPU,通过CPU进行配置寄存器,有些SoC没有CPU,需要使用I2C或者S ... 
- 【BUS】动画图解嵌入式常见的通讯协议:SPI、I²C、UART、红外 ......
			SPI传输 SPI数据传输 SPI数据传输 SPI时序信号 I2C传输 2C总线寻址 UART传输 PC-UART-MCU RS-232电平转换 红外控制 红外通信 红外信号接收.放大.整形 红外控制 ... 
- Laravel :  模糊查询 where   orWhere
			Banner::where('title', 'like', "%{$keyword}%")->orWhere('introduce', 'like', "%{$k ... 
- [转帖]【基础】HTTP、TCP/IP 协议的原理及应用
			https://juejin.cn/post/6844903938232156167 前言 本文将持续记录笔者在学习过程中掌握的一些 HTTP .TCP/IP 的原理,以及这些网络通信技术的一些应用场 ... 
- [转帖]sqlserver on linux vs windows
			简单对比下sqlserver on windows与linux的特点,发现新的继续添加 对比项 sqlserver on windows sqlserver on Linux 备注 费用 需要wind ... 
