【5分钟学会一个知识点】01.Elasticsearch基本操作-增删改查

目录

  • 【5分钟学会一个知识点-探索现代搜索与分析引擎的魅力】01.Elasticsearch基本操作-增删改查
  • 1.基本操作
    • 1.1索引操作
    • 1.2文档操作
    • 1.3查询
    • 1.4修改数据
    • 1.5查询
      • 1.5.1条件查询
        • 1.5.1.1遍历所有的索引
        • 1.5.1.2查询某个索引
        • 1.5.1.3条件查询1:使用GET url传参数
        • 1.5.1.4条件查询2:使用body传参
        • 1.5.1.5body全量查询
        • 1.5.1.6分页查询
        • 1.5.1.7过滤一些不需要的字段
        • 1.5.1.8排序
        • 1.5.1.9多条件查询
        • 1.5.1.10 查询结果高亮与完全匹配
        • 1.5.1.11范围查询
        • 1.5.1.12聚合函数
        • 1.5.1.13加上size=0就可以只有聚合结果
        • 1.5.1.14计算平均值
        • 1.5.1.15映射关系
    • 1.6别名
      • 1.6.1 创建别名

🥰微信公众号:【给点知识】分享小知识,快速成长,欢迎关注呀!(底部点击二维码)
🥰学习宗旨:活到老,学到老。
😍写作宗旨:致力于改变现有文章难读难懂问题。

【5分钟学会一个知识点-探索现代搜索与分析引擎的魅力】01.Elasticsearch基本操作-增删改查

1.基本操作

1.1索引操作

  1. 创建索引
PUT /{index}/
  1. 查看某个索引的信息
GET /{index}/
  1. 查看全部的索引
GET /_cat/indices
  1. 删除索引
DELETE /{index}

1.2文档操作

  1. 文档添加:使用POST方法,因为POST不是幂等性的,每次请求,都会创建不同的id所以,需要使用非幂等的方法
POST /{index}/_doc
{"price":6999,"name":"mac1.1.0","notes":"苹果mac大陆版本 6+64G"
}
// 输出结果
{"_index": "computer","_id": "isICNI8B0eUrClfT84k3","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1
}
  1. 文档添加:当指定id的时候就可以使用PUT请求,因为id一定,那么只能创建一条数据
PUT /{index}/_doc/{id}
PUT /computer/_doc/001
或者
PUT /computer/_create/001
{"price":6999,"name":"mac1.2.0","notes":"苹果mac大陆版本 6+128G"
}// 输出结果
{"_index": "computer","_id": "001","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 1, "_primary_term": 1
}

1.3查询

  1. 查询所有的数据
GET /{index}/_search
  1. 主键查询
GET /{index}/_doc/{id}/

1.4修改数据

  1. 修改是根据文档id修改,如果存在就修改否则就新增
    PUT修改是全量的更新
PUT /{index}/_doc/{id}
body:
{"price":6999,"name":"mac1.2.0","notes":"苹果mac大陆版本 6+128G"
}# 输出结果如下
返回结果:例如下面的result显示的是upadted
{"_index": "computer","_id": "1001","_version": 2,"result": "updated", // 这里显示结果是updated "_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 5,"_primary_term": 3
}

如果传入参数如下,就会造成,传入几个字段就更新几个字段,因为PUT是幂等的

PUT /{index}/_doc/{id}
POST  /{index}/_doc/{id}
body:
{"price":2999
}
# 输出结果如下只有一个字段了
{"_index": "computer","_id": "1001","_score": 1.0,"_source": {"price": 2999}
}

以上是因为 PUT是全量更新,为了达到局部更新,这里可以使用POST实现
2. POST实现局部更新

POST /{index}/_update/{id}{"doc":{"price":2999,"name":"mac1.2.0","notes":"苹果mac大陆版本 6+128G"}
}

如果增加了一个字段,那么直接增加也会出现一个字段

POST /{index}/_update/{id}{"doc":{"price":2999,"name":"mac1.2.0","notes":"苹果mac大陆版本 6+128G","text":"text"}
}
# 输出结果"hits": [{"_index": "computer","_id": "1001","_score": 1.0,"_source": {"price": 2999,"name": "mac1.2.0","notes": "苹果mac大陆版本 6+128G","text": "text"}}

🥰微信公众号:【给点知识】分享小知识,快速成长,欢迎关注呀!(底部点击二维码)
🥰学习宗旨:活到老,学到老。
😍写作宗旨:致力于改变现有文章难读难懂问题。
在这里插入图片描述

1.5查询

1.5.1条件查询

1.5.1.1遍历所有的索引
GET /_search
1.5.1.2查询某个索引
GET /{index}/_search
1.5.1.3条件查询1:使用GET url传参数
GET /{index}/_search?q=filed:xxx
eg:http://10.67.199.181:8080/iphone/_search?q=name:小米
1.5.1.4条件查询2:使用body传参
GET/POST  /{index}/_search{"query":{ // 我要做个什么:查询"match":{ // 什么查询:匹配"name":"小米华为" // 查询那个字段以及对应字段的的值}}
}
# 查询索引
{"took": 26,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 2.7901525,"hits": [{"_index": "iphone","_id": "SSMWTo8B3uHRqn1-nWGc","_score": 2.7901525,"_source": {"price": 9999,"name": "华为meta60","notes": "华为meta60 6+64G"}},{"_index": "iphone","_id": "SiMWTo8B3uHRqn1-xGER","_score": 1.7503443,"_source": {"price": 9999,"name": "保时捷版本华为meta60","notes": "华为meta60 6+64G"}}]}
}
1.5.1.5body全量查询
GET/POST  /{index}/_search{"query":{ // 我要做个什么:查询"match_all":{ // 什么查询:全量匹配}}
}
1.5.1.6分页查询
GET/POST /{index}/_search
{"query":{"match_all":{}},"from":0,// 开始"size":2 // 每页个数
}
1.5.1.7过滤一些不需要的字段
```python
GET/POST /{index}/_search
{"query":{"match_all":{}},"from":0,// 开始"size":2, // 每页个数"_source":["name"]
}
1.5.1.8排序
GET/POST /{index}/_search
{"query":{"match_all":{}},"from":0,"size":2,"_source":["name"],"sort":{"price":{"order":"desc"}}
}
1.5.1.9多条件查询
GET/POST   /{index}/_search
1.或者条件:should
{"query": {"bool": {"should": [{"match": {"name": "小米"}},{"match": {"price": "1999"}}]}}
}
2. 同时成立:must
{"query": {"bool": {"must": [{"match": {"name": "小米"}},{"match": {"price": "1999"}}]}}
}
1.5.1.10 查询结果高亮与完全匹配
GET/POST   /{index}/_search
{"query":{"match_phrase":{ // 完全不配"name":"小米"}},"hightlight":{ // 对那个字段进行高亮"field":{"name":{}}}
}
1.5.1.11范围查询
GET/POST   /{index}/_search
{"query": {"bool": {"should": [{"match": {"name": "华为"}},{"match": {"price": "2988"}}],"filter":{"range":{"price":{"gt":"11009"}}}}}
}
1.5.1.12聚合函数
GET/POST   /{index}/_search
# body
{"aggs":{"price_agg":{"terms":{"field":"price"}}}
}
# 返回结果
{"took": 11,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "computer","_id": "1001","_score": 1.0,"_source": {"price": 2999,"name": "mac1.2.0","notes": "苹果mac大陆版本 6+128G","text": "text"}},{"_index": "computer","_id": "isICNI8B0eUrClfT84k3","_score": 1.0,"_source": {"price": 6999,"name": "mac1.1.0","notes": "苹果mac大陆版本 6+64G"}},{"_index": "computer","_id": "001","_score": 1.0,"_source": {"price": 6999,"name": "mac1.2.0","notes": "苹果mac大陆版本 6+128G"}}]},"aggregations": {"price_agg": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": 6999,"doc_count": 2},{"key": 2999,"doc_count": 1}]}}
}
1.5.1.13加上size=0就可以只有聚合结果
GET/POST   /{index}/_search
# body
{"aggs":{"price_agg":{"terms":{"field":"price"}}},"size":0
}
# 返回结果
{"took": 40,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": null,"hits": []},"aggregations": {"price_agg": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": 6999,"doc_count": 2},{"key": 2999,"doc_count": 1}]}}
}
1.5.1.14计算平均值
GET/POST   /{index}/_search
# body
{"aggs":{"price_avg":{"avg":{"field":"price"}}},"size":0
}
# 返回结果
{"took": 8,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": null,"hits": []},"aggregations": {"price_agg": {"value": 5665.666666666667}}
}
1.5.1.15映射关系

场景描述:有些查询时分词,有些不是,那么如何设置让那个字段可以分词或者不可以分词呢?
通过以下方式可以给每个字段设置所含有的属性
type:数据类型 keyword表示关键词必须全部匹配
index:是否可以被索引,true表示可以被索引

{"properties":{"name":{"type":"text","index":true},"gender":{"type":"keyword","index":true},"tel":{"type":"keyword","index":false}}
}
  1. 创建索引
PUT  /{index}
PUT /person
  1. 给索引设置属性
PUT /{index}/_mapping
{"properties":{"name":{"type":"text","index":true},"gender":{"type":"keyword","index":true},"tel":{"type":"keyword","index":false}}
}
  1. 直接在创建索引的时候直接加入属性
PUT /my_index
{"mappings": {"properties": {"name": {"type": "text"},"price": {"type": "integer"},"notes": {"type": "text"}}}
}

查询看效果:name是text类型,可以被分词查询.

POST /{index}/_search
// 请求体
{"query":{"match":{"name":"里张"}}
}
// 返回结果
{"took": 14,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 1.2613049,"hits": [{"_index": "person","_id": "003","_score": 1.2613049,"_source": {"name": "里斯","gender": "男生","tel": "19889999999"}},{"_index": "person","_id": "004","_score": 1.2613049,"_source": {"name": "张三","gender": "男生","tel": "18888888888"}}]}
}

注意:如果想实现text不分词查询也可使用

{"query":{"match_phrase":{"name":"里斯"}}
}

然后再查询其他字段

GET /{index}/_search
{"query":{"match":{"gender":"男女"}}
}
// 返回结果
{"took": 7,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 0,"relation": "eq"},"max_score": null,"hits": []}
}

使用gender:男生。是可以查询的

GET /{index}/_search
{"query":{"match":{"gender":"男生"}}
}{"took": 13,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.6931471,"hits": [{"_index": "person","_id": "003","_score": 0.6931471,"_source": {"name": "里斯","gender": "男生","tel": "19889999999"}},{"_index": "person","_id": "004","_score": 0.6931471,"_source": {"name": "张三","gender": "男生","tel": "18888888888"}}]}
}

8.x版本的是类型是text才可以设置index 是否可以被索引。测试发现当type=keyword时设置index无效。当为 text时是可以的。

{"mappings":{"properties":{"name":{"type":"text","index":true},"gender":{"type":"keyword","index":false},"tel":{"type":"text","index":false}}}
}

在这里插入图片描述

使用tel查询的时候提示错误不能被查询
在这里插入图片描述

1.6别名

1.6.1 创建别名

一个别名可以对应多个索引,别名对应多个索引可以用于检索不同的内容。
比如有索引
index001、index002、iphone

{"took": 47,"timed_out": false,"_shards": {"total": 3,"successful": 3,"skipped": 0,"failed": 0},"hits": {"total": {"value": 13,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "index001","_id": "001","_score": 1.0,"_source": {"name": "法兰","tell": "19998888888","index001": "英国"}},{"_index": "index001","_id": "002","_score": 1.0,"_source": {"name": "里斯","tell": "17778888888","index001": "美国"}},{"_index": "index001","_id": "003","_score": 1.0,"_source": {"name": "张三","tell": "18888888888","index001": "中国"}},{"_index": "index002","_id": "001","_score": 1.0,"_source": {"name": "里斯2","tell": "18999998888","index002": "美国"}},{"_index": "index002","_id": "002","_score": 1.0,"_source": {"name": "青青","tell": "11111111111","index002": "英国"}},{"_index": "index002","_id": "003","_score": 1.0,"_source": {"name": "王五2","tell": "13333333336","index002": "中国"}},{"_index": "iphone","_id": "RyMWTo8B3uHRqn1-JGGx","_score": 1.0,"_source": {"price": 6999,"name": "iphone15 pro","notes": "苹果15大陆版本 6+64G"}},{"_index": "iphone","_id": "SSMWTo8B3uHRqn1-nWGc","_score": 1.0,"_source": {"price": 9999,"name": "华为meta60","notes": "华为meta60 6+64G"}},{"_index": "iphone","_id": "SiMWTo8B3uHRqn1-xGER","_score": 1.0,"_source": {"price": 9999,"name": "保时捷版本华为meta60","notes": "华为meta60 6+64G"}},{"_index": "iphone","_id": "SyMXTo8B3uHRqn1-CGFr","_score": 1.0,"_source": {"price": 99,"name": "三星盖乐世","notes": "三星盖乐世 6+64G"}}]}
}

创建别名

POST /_aliases
{"actions": [{"add": {"indices": ["index001", "index002", "iphone"],"alias": "alias-index001-index002-iphone"}}]
}

别名搜索:直接所有别名就可以直接搜索到对应的值

GET /{index}/_search
# 查询请求体
{"query": {"bool": {"must": [{"match": {"name": "三星"}}]}}
}
# 返回结果
{"took": 255,"timed_out": false,"_shards": {"total": 3,"successful": 1,"skipped": 0,"failed": 2,"failures": [{"shard": 0,"index": "index001","node": "W8VpzO2_RDSExCsKqgEG0w","reason": {"type": "query_shard_exception","reason": "failed to create query: Cannot search on field [name] since it is not indexed.","index_uuid": "m_O1UmvdSRCIXgFipofDbw","index": "index001","caused_by": {"type": "illegal_argument_exception","reason": "Cannot search on field [name] since it is not indexed."}}},{"shard": 0,"index": "index002","node": "W8VpzO2_RDSExCsKqgEG0w","reason": {"type": "query_shard_exception","reason": "failed to create query: Cannot search on field [name] since it is not indexed.","index_uuid": "mQynij2cTqmJVEQUxGGZBw","index": "index002","caused_by": {"type": "illegal_argument_exception","reason": "Cannot search on field [name] since it is not indexed."}}}]},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 3.1534967,"hits": [{"_index": "iphone","_id": "SyMXTo8B3uHRqn1-CGFr","_score": 3.1534967,"_source": {"price": 99,"name": "三星盖乐世","notes": "三星盖乐世 6+64G"}}]}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库基础(数据库操作,常用数据类型,表的操作)

MySQL数据库基础(数据库操作,常用数据类型,表的操作) 前言 数据库的操作1.显示当前数据库2.创建数据库3.使用数据库4.删除数据库 常用数据类型1.数值类型2.字符串类型3.日期类型 表的操作1.查看表结构2.创建表3.删除表 总结 前言 …

深入解析MySQL中的事务(下)

MySQL事务管理 3. 隔离性(Isolation)查看和设置隔离级别隔离级别作用域区别与解析 四种隔离级别解析小结 4. 一致性(Consistency)如何保持一致性 5.“保持原子性、隔离性、持久性就能保证一致性”的理解: 四、如何理解…

【高阶数据结构】并查集

并查集 并查集1、概念2、根据人找编号 / 根据编号找人(简单介绍一下并查集)(1)代码展示(2)调试结果(3)优化1:小的往大的合并(4)优化2:…

Linux下安装gmp6.2.1的详细操作(深度学习)

方式一:编译gmp GMP官方地址https://gmplib.org/ 1. 官网下载gmp安装包 2. 解压下载好的安装包 tar -zxvf gmp-6.2.1.tar.bz2 3. 进入解压后的文件夹 cd gmp-6.2.1 4. 指定安装路径进行安装 # /usr/local换成自己的安装路径 ./configure --prefix/usr/local 5. 编…

鸿蒙ArkUI-X跨平台开发电商应用

一、ArkUI-X 简介 ArkUI-X 是由 OpenHarmony TSC - 跨平台应用开发框架 TSG 所孵化的开源项目,使用ArkUI-X可以让开发者基于一套主代码, 就可以构建支持多平台的精美、高性能应用。目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。 ArKUI跨平台…

volatile 和 synchronzied 的区别

文章目录 概述volatilesynchornizedvolatile vs synchornized总结 概述 提起并发编程,我们不得不说起 volatile 和 synchronized 这两个关键字,这两个关键字也是面试中常常被问到的,下面我们分别介绍一下这两个关键字以及二者的异同。首先需要…

Java构造方法详解

在Java方法内部定义一个局部变量时,必须要初始化,否则就会编译失败,如下: 要让上述代码通过编译,只需在使用a之前给a赋一个初始值即可 如果是对象:下面用一个日期类演示 我们没有给年月日赋值,…

[通用人工智能] 论文分享:ElasticViT:基于冲突感知超网的快速视觉Transformer

引言: 近年来,视觉Transformer(Vision Transformer,简称ViT)在计算机视觉任务中的应用日益广泛,从图像分类到对象识别等,均显示出优越的性能。然而,ViT模型也面临一些挑战,特别是在模…

ASME美国机械工程师学会文献如何查询下载经验分享

一、ASME美国机械工程师学会数据库简介: ASME是世界上最大的技术出版机构之一,制定众多的工业和制造业行业标准。现在ASME拥有工业和制造行业的600项标准和规范,这些标准在全球90多个国家被采用。 ASME数据库包含25种专业期刊,其…

鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式

运行机制 共享好端端的一词,近些年被玩坏了,共享单车,共享充电宝,共享办公室,共享雨伞… 甚至还有共享女朋友,真是人有多大胆,共享有多大产。但凡事太尽就容易恶心到人,自己也一度被 共享内存 恶心到了&am…

OpenHarmony 实战开发——轻量带屏解决方案之恒玄芯片移植案例

本文章基于恒玄科技BES2600W芯片的欧智通 Multi-modal V200Z-R开发板 ,进行轻量带屏开发板的标准移植,开发了智能开关面板样例,同时实现了ace_engine_lite、arkui_ui_lite、aafwk_lite、appexecfwk_lite、HDF等部件基于OpenHarmony LiteOS-M内…

论文AI率:检测原理是什么?该如何降低论文AI率?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 上一篇介绍了10个检测AI率的在线工具。本篇来说说AI率到底是如何检测出来的?该如何有效降低论文的AI率? 和AI大模型一样,AI检测的核心也是…

vscode打开esp-idf工程,找不到头文件,有波浪线

就像这样 多半是因为原始的工程不是用vscode的插件新建的,因此没有相关的路径。需要在工程文件夹下的.vscode文件夹中的c_cpp_properties.json文件中增加路径,可以参考插件自动新建的工程里面的写法 {"configurations": [{"name":…

线上问题——一次几经反转惊心动魄的问题排查记录

背景简述 线上某业务由于查询大量数据频繁FullGc优化,依赖于用户完课进度,测试时需要造大量的用户和专栏内容发放数据,且需要用户完课触发,因此在FAT造了一个5000人的班级,这个班级只有3个课时,测试通过脚…

Midjourney与Stable Diffusion大比拼:AI绘画技术的未来

在当今快速发展的人工智能技术浪潮中,AI绘画软件成为了艺术和技术交汇的新领域。两大巨头——Midjourney和Stable Diffusion,在这一领域中引领风骚,它们以其独特的功能和强大的生成能力,让创作者能够将想象力化为现实。本文将深入…

进程与线程含义、区别及在操作系统中的意义(简要)

在现代操作系统中,进程和线程是构建多任务环境的基础。它们虽然紧密相关,但各自扮演着不同的角色。本文将深入探讨进程与线程的概念、它们之间的区别,以及为什么操作系统中会存在进程这一概念。 进程:独立运行的实体 它是操作系…

conan2 基础入门(04)-指定编译器(gcc为例)

conan2 基础入门(04)-指定编译器(gcc为例) 文章目录 conan2 基础入门(04)-指定编译器(gcc为例)⭐准备生成profile文件预备文件和Code ⭐使用指令预览正确执行结果可能出现的问题 ⭐具体讲解conancmake ENDsettings.yml ⭐准备 生成profile文件 # 生成默认profile文件&#xf…

国产操作系统下Chrome的命令行使用 _ 统信 _ 麒麟

原文链接:国产操作系统下Chrome的命令行使用 | 统信 | 麒麟 Hello,大家好啊!今天我们来聊聊如何在国产操作系统上使用命令行操作Google Chrome。无论是进行自动化测试、网页截图还是网页数据抓取,使用命令行操作Google Chrome都能…

Go编程语言的调试器Delve | Goland远程连接Linux开发调试(go远程开发)

文章目录 Go编程语言的调试器一、什么是Delve二、delve 安装安装报错cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in $PATH解决 三、delve命令行使用delve 常见的调试模式常用调试方法todo调试程序代码与动态库加载程序运行…

常用的简单友好的工单系统(免费)- WGCAT

最近在项目中,有工单系统的需求场景,所以想寻找一款轻量简单的运维工单软件,主要用来记录和处理工作中的一些故障、维护,主要用来记录设备的维护状态,包括服务器、主机、交换机那些 WGCAT,是一款简单轻量的…