草庐IT

开篇点睛——Elasticsearch

ybb_ymm 2023-04-04 原文

在互联网当中我们的查询的信息主要包括文章、视频、图片、网站信息等各式各样的复杂海量信息。怎么才能快速、准确的检索到我们想要的信息呢?

传统意义上根据数据的格式,我们会将数据分为三个大类

  1. 结构化数据
  2. 非结构化数据
  3. 半结构化数据

接下来我们详细的了解一下这3类数据结构:

  • 结构化数据

    所谓的结构化数据,我们一般会用特定的结构来组织和管理数据,它一般表现为二维的表结构。

    如下图中,我们的用户数据。其中包含了我们用户的姓名、手机号等信息。这 些信息是有关系的,所以我们可以保存到关系型数据库当中。比方说Mysql当中, 并可以通过SQL语句来进行查询。为了提高效率,我们甚至可以采用一些索引的方 式来优化查询。

    它的优点就是方便管理、方便查询;它的缺点是扩展结构难。

    当我们已经有现有的结构之后,我们再去扩展,其实不方便

    这是我们的结构化数据

  • 非机构化数据

    所谓的非结构化数据,其实就是我们无法用二维表结构来表现数据的这种数据。

    如下图中的工作文档中的报表、视频、图片、服务器日志、通信记录等这些数据。

    它的维度广、数据量大,所以数据存储和查询的成本其实是非常大的,往往需要专业的人员和大量的统计来进行处理。

    一般会将这样的数据保存到Nosql数据库中,比如Mogodb、Redis中。那么这样的数据库一般都是以key-value结构来进行保存的,查询我们的数据相对来说比较快。

 

这是我们的非结构化数据

  • 半结构化数据

    半结构化数据,就是说将数据的结构和内容混在一起,它没有明显的区分。

    比如xml,html这样的文档其实就是我们的半结构化数据,这样的数据一般也都是保存到Mogodb这样数据库当中。

    它的缺点就在于我们查询它的内容其实不是很容易。

    真实使用场景下,我们搜索的对象并非都是关系型结构化的信息,我们无法像数据库模糊查询那样模糊匹配,更不可能便利所有的内容做匹配。毕竟查询的目的是为了快速找到你想要的信息。

思考问题

如何在海量数据中,查询结构化数据以及非结构化数据当中的内容?并且准确的查询是非常重要的。

解决方案

带着前面的问题,先来看一个分布式免费开源搜索分析引擎,他的名字叫——Elasticsearch。从名字上来看他表示可伸缩、灵活的查询的意思,从字面上我们可以了解这款引擎的核心就是查询。

随着5G时代的到来,海量数据充斥着我们生活的方方面面,实时数据的采集分析存储就是计算机数据处理技术未来发展的方向。而我们要学习的Elasticsearch在这些方面表现是非常抢眼的,所以我们要持续的关注Elasticsearch,看看能够给我们带来哪些惊喜?

那接下来我们一起来走入Elasticsearch的世界,感受他的魅力

初识Elasticsearch

什么是Elasticsearch

Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

Elasticsearch的用途是什么?

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

Elasticsearch的工作原理

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理

基本概念

1、Index(索引)

动词:相当于Mysql中的Insert操作

名词:相当于Mysql中的Database

2、Type(类型)

在Index(索引)中,可以定义一个或多个类型;

类似于Mysql中的Table,每一种类型的数据放在一起;

3、Document(文档)

保存在某个索引(索引)下,某种类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是Mysql中的某个Table里面的内容;

Elasticsearch与Mysql对比

elasticsearch和mysql概念对比关系表
ElasticsearchIndex(索引)Type(类型)Document(文档)Fields(字段)
MysqlDatabase(数据库)Table(表)Row(行)Column(列)

官方文档:

下面这个是官方文档有助于我们更好的学习:

www.elastic.co/guide/en/el…

欢迎大家关注我的《coder练习生》

有关开篇点睛——Elasticsearch的更多相关文章

  1. ruby - Rails Elasticsearch 聚合 - 2

    不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a

  2. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  3. ruby-on-rails - 使用 Rails (Tire) 和 ElasticSearch 进行模糊字符串匹配 - 2

    我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us

  4. 美团外卖搜索基于Elasticsearch的优化实践 - 2

    美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-BasedService(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-LengthEncoding(RLE)设计了一款高效的倒排索引结构,使检索耗时(TP99)降低了84%。本文从问题分析、技术选型、优化方案等方面进行阐述,并给出最终灰度验证的结论。1.前言最近十年,Elasticsearch已经成为了最受欢迎的开源检索引擎,其作为离线数仓、近线检索、B端检索的经典基建,已沉淀了大量的实践案例及优化总结。然而在高并发、高可用、大数据量的C端场景,目前可参考的资料并不多。因此

  5. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  6. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  7. ruby-on-rails - Elasticsearch 问题 : Cannot connect AWS elasticsearch service - 2

    我有一个关于配置elasticsearch以连接AWSelasticsearch服务以在生产环境中运行项目的问题。我的gem文件:gem'searchkick'gem'faraday_middleware-aws-signers-v4'gem'aws-sdk','~>2'gem"elasticsearch",">=1.0.15"引用:https://github.com/ankane/searchkick我的config/initializers/elasticsearch.rb文件:require"faraday_middleware/aws_signers_v4"ENV["ELAS

  8. linux查看es节点使用情况,elasticsearch(es) 如何查看当前集群中哪个节点是主节点(master) - 2

    elasticsearch查看当前集群中的master节点是哪个需要使用_cat监控命令,具体如下。查看方法es主节点确定命令,以kibana上查看示例如下:GET_cat/nodesv返回结果示例如下:ipheap.percentram.percentcpuload_1mload_5mload_15mnode.rolemastername172.16.16.188529952.591.701.45mdi-elastic3172.16.16.187329950.990.991.19mdi-elastic2172.16.16.231699940.871.001.03mdi-elastic4172

  9. ruby - 在 Elasticsearch 中计算地理距离 - 2

    我在查询中使用geo_distancefilter和tire,它工作正常:search.filter:geo_distance,:distance=>"#{request.distance}km",:location=>"#{request.lat},#{request.lng}"我预计结果会以某种方式包括到我用于过滤器的地理位置的计算距离。有没有办法告诉elasticsearch在响应中包含它,这样我就不必在ruby​​中为每个结果计算它?==更新==我在谷歌群组中的foundtheanswer:search.sortdoby"_geo_distance","location"=>"

  10. ruby - 有没有办法计算 ElasticSearch 或 Tire 中索引的所有元素? - 2

    如果不必像这样进行搜索就可以对元素进行计数,那就太好了Obj.search("id:*").count这可能吗? 最佳答案 在ElasticSearch中,您可以使用计数API对所有元素进行计数curl-XGEThttp://localhost:9200/index/_count参见CountAPI他们网站上的文档。 关于ruby-有没有办法计算ElasticSearch或Tire中索引的所有元素?,我们在StackOverflow上找到一个类似的问题: ht

随机推荐