【Elasticsearch】Elasticsearch快速入门,掌握这些刚刚好!(官网入门案例)

文章目录

  • 1. 简介
  • 2. 相关概念
  • 3. 安装
  • 4. 集群状态查看
  • 5. 索引操作
  • 6. 文档操作
  • 7. 数据搜索
    • 数据准备
    • 搜索入门(match_all)
    • 条件搜索(match)
    • 组合搜索(bool)
    • 过滤搜索(filter)
    • 搜索聚合(aggs)
  • 8. 参考资料

本文的主要功能是带领从0到1入门Elasticsearch的基础使用,重点是Elasticsearch中的"数据搜索",即 _search

1. 简介

Elasticsearch是一个近乎实时的搜索平台。它提供了一个分布式的全文搜索引擎,提供了REST API接口与用户交互。Elasticsearch是用Java语言开发的,基于Apache协议的开源项目,是目前最受欢迎的企业搜索引擎。Elasticsearch广泛运用于云计算中,能够达到实时搜索,具有稳定,可靠,快速的特点。

如何与Elasticsearch交流,Elasticsearch提供了一个非常全面和强大的REST API,您可以使用它

  • Check your cluster, node, and index health, status, and statistics
  • Administer your cluster, node, and index data and metadata
  • Perform CRUD (Create, Read, Update, and Delete) and search operations against your indexes
  • Execute advanced search operations such as paging, sorting, filtering, scripting, aggregations, and many others

2. 相关概念

官网说明了以下概念。

  • Near Realtime(近实时):Elasticsearch是一个近乎实时的搜索平台,这意味着从索引文档到可搜索文档之间只有一个轻微的延迟(通常是一秒钟)。
  • Cluster(集群):群集是一个或多个节点的集合,它们一起保存整个数据,并提供跨所有节点的联合索引和搜索功能。每个群集都有自己的唯一群集名称,节点通过名称加入群集。
  • Node(节点):节点是指属于集群的单个Elasticsearch实例,存储数据并参与集群的索引和搜索功能。
  • Index(索引):Index相当于**“某类数据”**。索引是一些具有相似特征的文档集合。
  • Document(文档):Document相当于Index中的**“某条数据”**。文档是可被索引的基本信息单位,以JSON形式表示
  • Shards(分片):分片概念类似Kafka中的分区。分片机制赋予了索引水平扩容的能力,提高性能和吞吐量。
  • Replicas(副本):副本在某些节点失效的情况下提供高可用性。

3. 安装

注:

  • 尽管作者前面写过Docker安装Elasticsearch、Kibana的文章,但是后期分析Docker方式体验很差,这里并不适用Docker安装,没有给我们带来方便,所以这里不推荐Docker安装方式而是使用安装包方式

  • Elasticsearch和Kibana的版本要求保持一致

Elasticsearch是近乎实时的搜索平台,提供了REST API接口与用户交互,所以后面的案例本可以只安装Elasticsearch就够了。但是为了方便起见,我们选择多安装一个Elasticsearch的可视化平台Kibana来操作后面的案例。以Elasticsearch6.6.2为例:

  • Elasticsearch下载安装
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
tar -xvf elasticsearch-6.6.2.tar.gz
cd elasticsearch-6.6.2
./bin/elasticsearch
  • 浏览器访问http://localhost:9200检查Elasticsearch是否安装成功

  • Kibana下载安装
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-darwin-x86_64.tar.gz
tar -xzf kibana-6.6.2-darwin-x86_64.tar.gz
cd kibana-6.6.2-darwin-x86_64/
./bin/kibana
  • 浏览器访问http://localhost:5601检查Kibana是否安装成功

能正常点击左侧菜单就没有问题,zipkin是我测试zipkin时的索引,可忽略

  • 使用Kibana的可视化平台操作界面,后续案例的操作都在这里进行

4. 集群状态查看

  • 查看集群健康状态;
GET /_cat/health?v
  • 查看节点状态;
GET /_cat/nodes?v
  • 查看所有索引信息;
GET /_cat/indices?v

5. 索引操作

  • 创建索引并查看;
PUT /customer
GET /_cat/indices?v
  • 删除索引并查看;
DELETE /customer
GET /_cat/indices?v

6. 文档操作

  • 在索引中添加文档;
PUT /customer/_doc/1
{"name": "John Doe"
}
  • 查看索引中的文档;
GET /customer/_doc/1
  • 替换索引中的文档
PUT /customer/_doc/1?pretty
{"name": "John Doe"
}
  • 修改索引中的文档:
POST /customer/_doc/1/_update?pretty
{"doc": { "name": "Jane Doe" }
}
POST /customer/_doc/1/_update?pretty
{"doc": { "name": "Jane Doe", "age": 20 }
}
POST /customer/_doc/1/_update?pretty
{"script" : "ctx._source.age += 5"
}

修改跟替换是不同的

  • 删除索引中的文档;
DELETE /customer/doc/1
  • 对索引中的文档执行批量操作
POST /customer/doc/_bulk
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

7. 数据搜索

查询表达式(Query DSL)是一种非常灵活又富有表现力的查询语言,Elasticsearch使用它可以以简单的JSON接口来实现丰富的搜索功能,下面的搜索操作都将使用它。

数据搜索才是Elasticsearch的重点内容。

数据准备

  • 首先我们需要导入一定量的数据用于搜索,使用的是银行账户表的例子,数据结构schema如下:
{"account_number": 0,"balance": 16623,"firstname": "Bradshaw","lastname": "Mckenzie","age": 29,"gender": "F","address": "244 Columbus Place","employer": "Euron","email": "bradshawmckenzie@euron.com","city": "Hobucken","state": "CO"
}
  • 下载官方准备好的数据数据,数据地址:https://github.com/elastic/elasticsearch/blob/6.6/docs/src/test/resources/accounts.json。备用地址:https://gitee.com/firefish985/article-list/blob/master/%E5%A4%A7%E6%95%B0%E6%8D%AE/Elasticsearch/accounts.json

  • 导入数据到Elasticsearch

可以在当前目录用命令导入

curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"

也可以在Kibana的Dev Tools中批量导入。

  • 导入完成后查看索引信息,可以发现bank索引中已经创建了1000条文档
GET /_cat/indices?v

搜索入门(match_all)

  • 最简单的搜索,使用match_all来表示,例如搜索全部;
GET /bank/_search
{"query": { "match_all": {} }
}
  • 分页搜索,from表示偏移量,从0开始,size表示每页显示的数量;
GET /bank/_search
{"query": { "match_all": {} },"from": 0,"size": 10
}

  • 搜索排序,使用sort表示,例如按balance字段降序排列;
GET /bank/_search
{"query": { "match_all": {} },"sort": { "balance": { "order": "desc" } }
}
  • 搜索并返回指定字段内容,使用_source表示,例如只返回account_numberbalance两个字段内容:
GET /bank/_search
{"query": { "match_all": {} },"_source": ["account_number", "balance"]
}

条件搜索(match)

  • 条件搜索,使用match表示匹配条件,例如搜索出account_number20的文档:
GET /bank/_search
{"query": { "match": { "account_number": 20 } }
}
  • 文本类型字段的条件搜索,例如搜索address字段中包含mill的文档,对比上一条搜索可以发现,对于数值类型match操作使用的是精确匹配,对于文本类型使用的是模糊匹配;
GET /bank/_search
{"query": { "match": { "address": "mill" } },"_source": ["address", "account_number"]
}
  • 短语匹配搜索,使用match_phrase表示,例如搜索address字段中包含mill lane的文档
GET /bank/_search
{"query": { "match_phrase": { "address": "mill lane" } }
}

组合搜索(bool)

  • 组合搜索,使用bool来进行组合,must表示同时满足,例如搜索address字段中同时包含milllane的文档;
GET /bank/_search
{"query": {"bool": {"must": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}
  • 组合搜索,should表示满足其中任意一个,搜索address字段中包含mill或者lane的文档;
GET /bank/_search
{"query": {"bool": {"should": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}
  • 组合搜索,must_not表示同时不满足,例如搜索address字段中不包含mill且不包含lane的文档;
GET /bank/_search
{"query": {"bool": {"must_not": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}
  • 组合搜索,组合mustmust_not,例如搜索age字段等于40state字段不包含ID的文档;
GET /bank/_search
{"query": {"bool": {"must": [{ "match": { "age": "40" } }],"must_not": [{ "match": { "state": "ID" } }]}}
}

过滤搜索(filter)

  • 搜索过滤,使用filter来表示,例如过滤出balance字段在20000~30000的文档;
GET /bank/_search
{"query": {"bool": {"must": { "match_all": {} },"filter": {"range": {"balance": {"gte": 20000,"lte": 30000}}}}}
}

搜索聚合(aggs)

  • 对搜索结果进行聚合,使用aggs来表示,类似于MySql中的group by,例如对state字段进行聚合,统计出相同state的文档数量;
GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword"}}}
}

类似于SQL语句中的

SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC LIMIT 10;

"size": 0只要聚合结果

  • 嵌套聚合,例如对state字段进行聚合,统计出相同state的文档数量,再统计出balance的平均值;
GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword"},"aggs": {"average_balance": {"avg": {"field": "balance"}}}}}
}
  • 对聚合搜索的结果进行排序,例如按balance的平均值降序排列;
GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword","order": {"average_balance": "desc"}},"aggs": {"average_balance": {"avg": {"field": "balance"}}}}}
}
  • 按字段值的范围进行分段聚合,例如分段范围为age字段的[20,30] [30,40] [40,50],之后按gender统计文档个数和balance的平均值;
GET /bank/_search
{"size": 0,"aggs": {"group_by_age": {"range": {"field": "age","ranges": [{"from": 20,"to": 30},{"from": 30,"to": 40},{"from": 40,"to": 50}]},"aggs": {"group_by_gender": {"terms": {"field": "gender.keyword"},"aggs": {"average_balance": {"avg": {"field": "balance"}}}}}}}
}

8. 参考资料

官网入门案例:https://www.elastic.co/guide/en/elasticsearch/reference/6.6/getting-started.html

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

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

相关文章

springboot+vue农产品特产商城销售平台_50kf2 多商家

随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,南阳特产销售平台展现了其蓬勃生命力和广阔的前景。与此同时,为解决…

Meta开源AI音频和音乐生成模型

在过去的几年里,我们看到了AI在图像、视频和文本生成方面的巨大进步。然而,音频生成领域的进展却相对滞后。MetaAI这次再为开源贡献重磅产品:AudioCraft,一个支持多个音频生成模型的音频生成开发框架。 AudioCraft开源地址 开源地…

【JavaEE】简单了解JVM

目录 一、JVM中的内存区域划分 二、JVM的类加载机制 1、类加载的触发时机 2、双亲委派模型 1.1、向上委派 1.2、向下委派 三、JVM中的垃圾回收机制(GC) 1、确认垃圾 1.1、引用计数(Java实际上没有使用这个方案,但是Pytho…

SpringBoot核心内容梳理

1.SpringBoot是什么? Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它简化了Spring应用程序的创建和开发过程,使开发人员能够更快速地创建独立的、生产就绪的Spring应用程序。它采用了“约定优于配置”的原则,尽可能地减少开发人员需要进…

vue使用拖拽功能实现仓库存放货物的需求

效果&#xff1a; 代码 <template><div><div class"bigTitle">xxxxxxxxxxxxxx仓库拖拽系统</div><div class"container2 flex-j-space-between"><div class"product-list"><div class"leftTree h…

利用线程池多线程并发实现TCP两端通信交互,并将服务端设为守护进程

文章目录 实现目标实现步骤封装日志类封装线程池封装线程封装锁封装线程池 TCP通信的接口和注意事项accept TCP封装任务客户端Client.hppClient.cc 服务端Server.hpp Server.cc实现效果 守护进程服务端守护进程化 实现目标 利用线程池多线程并发实现基于TCP通信的多个客户端与…

Java Collection接口详解

Collection 接口 Collection接口是Java集合框架的根接口。 Collection 接口是 List、Set 和 Queue 接口的父接口&#xff0c;通常情况下不被直接使用。 Collection 接口定义了一些通用的方法&#xff0c;通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set …

docker创建镜像并上传云端服务器

docker创建镜像并上传云端服务器 docker容器与镜像的关系1.基本镜像相关文件创建1.1 创建dockerfile文件1.2.创建do.sh文件1.3 创建upload_server_api.py文件1.4 创建upload_server_webui.py文件1.5 文件保存位置 2. 创建镜像操作2.1 创建镜像2.3 创建容器2.2 进入环境容器2.3 …

【2023年电赛国一必备】A题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 &#xff08;部分&#xff09; 摘要 本实验旨在设计和制作一个由两个单相逆变器组成的并联系统&#xff0c;用于为电阻负载供电或并入220V电网。采用基于STM…

【react】react生命周期钩子函数:

文章目录 一、生命周期概念:二、生命周期:三、挂载阶段&#xff08;constructor > render > componentDidMount&#xff09;&#xff1a;四、更新阶段&#xff08;render > componentDidUpdate&#xff09;&#xff1a;五、卸载阶段&#xff08;componentWillUnmount …

il汇编整数相加

在这里尝试了IL汇编字符串连接&#xff1b; IL汇编字符串连接_bcbobo21cn的博客-CSDN博客 下面来看一下IL汇编整数相加&#xff1b; 大概的看一下一些资料&#xff0c;下面语句&#xff0c; ldc.i4 20 ldc.i4 30 add 看上去像是&#xff0c;装载整数20到一个类似于…

VK1056B 液晶LCD显示驱动IC/14x4com工作电压2.4-5.2V稳定测试

LCD液晶显示驱动芯片VK1056B 14x4位的显示RAM适用于各种LED应用产品 产品型号&#xff1a;VK1056B (兼容替代TM系列驱动) 产品品牌&#xff1a;VINKA永嘉微电 封装形式&#xff1a;SOP24 SSOP24 产品年份&#xff1a;新年份 提供专业工程服务&#xff0c…

Django Rest_Framework(三)

文章目录 1. 认证Authentication2. 权限Permissions使用提供的权限举例自定义权限 3. 限流Throttling基本使用可选限流类 4. 过滤Filtering5. 排序Ordering6. 分页Pagination可选分页器 7. 异常处理 ExceptionsREST framework定义的异常 8. 自动生成接口文档coreapi安装依赖设置…

Apache Kafka Learning

目录 一、Kafka 1、Message Queue是什么&#xff1f; 2、Kafka 基础架构 3、Kafka安装 二、Maven项目测试 1、Topic API 2、生产者&消费者 一、Kafka Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式…

LCD驱动芯片VK1024B兼容HT系列驱动芯片,体积更小

产品型号&#xff1a;VK1024B 产品&#xff1a;VINKA/永嘉微电 封装形式&#xff1a;SOP16 产品年份&#xff1a;新年份 工程服务&#xff0c;技术支持&#xff0c;用芯服务 VK1024概述&#xff1a; VK1024B 是 24 点、 内存映象和多功能的 LCD 驱动&#xff0c; VK1024B …

【css】css隐藏元素

display:none&#xff1a;可以隐藏元素。该元素将被隐藏&#xff0c;并且页面将显示为好像该元素不在其中。visibility:hidden&#xff1a; 可以隐藏元素。但是&#xff0c;该元素仍将占用与之前相同的空间。元素将被隐藏&#xff0c;但仍会影响布局。 代码&#xff1a; <!…

C++ - 模板分离编译

模板分离编译 我们先来看一个问题&#xff0c;我们用 stack 容器的声明定义分离的例子来引出这个问题&#xff1a; // stack.h // stack.h #pragma once #include<deque>namespace My_stack {template<class T, class Container std::deque<T>>class stack…

完整模型的训练套路

从心所欲 不逾矩 天大地大 皆可去 一、官方模型的初使用 使用VGG16模型 VGG模型使用代码示例&#xff1a; import torchvision.models from torch import nndataset torchvision.datasets.CIFAR10(/cifar10, False, transformtorchvision.transforms.ToTensor())vgg16_true …

Electron 开发,报handshake failed; returned -1, SSL error code 1,错误

代码说明 在preload.js代码中&#xff0c;暴露参数给渲染线程renderer.js访问&#xff0c; renderer.js 报&#xff1a;ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说&#xff0c;跨进程传递消息&#xff0c;这意味…

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

目录 11、自由风格的CI操作&#xff08;最终&#xff09;Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目…