What is Elasticsearch
嗨!大家好,程序员读书栏目又回来了,这要感谢51CTO提供的录课专用麦克风。这次我们开始读Elasticsearch的官方文档。也就是ES, 那什么是ElasticSearch呢?
You know, for search (and analysis)
就像它的名字一样,它是用于搜索和分析的。
看到搜索有没有想到我们开发常用的关系性数据库?Mysql啊,PostgreSql啊什么的?那Elasticsearch又跟Mysql有什么区别呢?先前我们做搜索的确是使用的关系性数据库,但是对于文本的模糊查询使用关系性数据库的like语句性能比较低,可以想象一篇博客有2、3千字,如果要使用like语句判断这篇博客中是否出现了某个关键字,最坏的情况下计算机要进行2/3千次匹配计算,这个性能是很低的,Elasticsearch最初就是为了提高文本检索的性能开发的。它是怎么提高性能的呢?文档里也有介绍。我们接着往下面读。
Elasticsearch is the distributed search and analytics engine at the heart of the Elastic Stack.
这里提到Elasticsearch是Elastic技术栈中支持分布式搜索和分析的核心组件。既然是技术栈就不只包括Elasticsearch一种组件,那还包括那些组件呢?
Logstash and Beats facilitate collecting, aggregating, and enriching your data and storing it in Elasticsearch. Kibana enables you to interactively explore, visualize, and share insights into your data and manage and monitor the stack. Elasticsearch is where the indexing, search, and analysis magic happens.
这里对Elastic技术栈进行了简单的介绍,除了Elasticseach还包括用于数据搜集、聚合、加工处理的Logstach和Beats.可以对数据进行交互式探索分析可视化的Kibana,Kibana还具备对技术栈中组件的管理和监控功能。Elasticsearch主要负责对数据进行索引处理,提供搜索分析服务。简单来说Elastic技术栈就是从数据的搜集到存储再到可视化分析提供了一条龙的服务,该去大厅的去大厅该上二楼的上二楼想去三楼的去三楼,一站式解决,服务一条龙。
Elasticsearch provides near real-time search and analytics for all types of data. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch can efficiently store and index it in a way that supports fast searches.
Elasticsearch支持对所有数据类型的近实时搜索,我们刚才提到刚开始使用ES是为了提高全文检索的性能,随着ES的发展,它不但支持对文本类型数据还支持对数字甚至地理位置等类型数据进行快速的索引和搜索。功能是越来越强大,所以我们现在更倾向于说Elasticsearch是一个NoSql数据库。
这里还提到了俩个词structured or unstructured也就是结构化和非结构化,有的同学可能还听过半结构化,他们之间有什么区别呢?或者说怎么区分数据是结构化的还是半结构化的还是非结构化的?
我是这么区分的:
把数据分为数据的结构描述信息和具体的数据俩部分,什么意思呢?我们使用数据库中的一张学生表来举例,表本身是需要定义有多少字段,每个字段的类型、长度等信息的,这些定义的信息就是数据的结构描述信息,我们往表里插入的具体的学生名称啊学号啊这些就是具体的数据。那什么是结构化数据呢?结构化数据就是有固定结构描述信息的数据,比如我们数据库里的表,往表里插入的数据必须满足表的结构,无论你是多插入了一个不存在的字段还是数据长度超过了字段定义的长度都会报错,插不进去。
理解了结构化数据就不难理解非结构化数据了,非结构化数据就是没有结构描述信息的数据。比如我们在别人博客下面写的评论,可以说想怎么写就怎么写,很随意。
那什么又是半结构化数据呢?半结构化的数据也有结构描述信息,但是又不像结构化数据那样结构比较固定,像Json和XML类型的数据,虽然有一定的结构,但在使用的过程中多添加一个原来不存在的字段也不会报错。
在做大数据时经常会看到这三个词,这里顺便说下,我说的也未必对。还要提醒下大家,不要跟我学英语发音,因为我的英语发音不准,上学那会也是学的哑巴英语。 高考前猛看《高考必备》,不知道现在还有没,一本像词典一样的书,英语总分150,我当时考了138分的样子。考完就忘的差不多了。 很多同学应该都这样,高考前都是上知天文下知地理,高考一结束就都还给老师了。
我们接着往下面看:
You can go far beyond simple data retrieval and aggregate information to discover trends and patterns in your data. And as your data and query volume grows, the distributed nature of Elasticsearch enables your deployment to grow seamlessly right along with it.
我们不单可以使用ES做一些简单的数据检索和聚合分析去发现数据中的趋势和模式关系。我们还可以在数据越来越多的时候通过添加机器无缝的支持大数据量的处理。因为ES是原生支持分布式的。
While not every problem is a search problem, Elasticsearch offers speed and flexibility to handle data in a wide variety of use cases:
当然并不是所有的问题都可以通过搜索解决的,ES也提供了良好的性能和灵活性去适应不同的业务场景。比如:
Add a search box to an app or website
在app或者网站上添加个搜索框,可以考虑使用ES提供搜索服务
Store and analyze logs, metrics, and security event data
还可以使用ES存储、分析系统运行日志、性能指标和安全相关的事件数据。
Use machine learning to automatically model the behavior of your data in real time
使用机器学习自动对数据进行建模。机器学习的功能应该是ES6以后才新增的功能,这几年是云、大数据、机器学习比较火。 技术类的产品经常跟这几个词挂钩。
Automate business workflows using Elasticsearch as a storage engine
也可以将ES做为自动商业工作流中的存储引擎。
Manage, integrate, and analyze spatial information using Elasticsearch as a geographic information system (GIS)
也可以将ES做为一个地理位置信息系统使用,对地理位置信息进行管理和分析。
Store and process genetic data using Elasticsearch as a bioinformatics research tool
也可以将ES用于生物信息研究中,用于存储和处理基因数据。
官方给的这几个用例场景跨度还是蛮大的,从普通的网站到GIS再到生物信息。可以说ES的应用范围还是挺广的。
We’re continually amazed by the novel ways people use search.
虽然我们已经知道在很多不同领域中都有使用ES,但是我们还是经常被用户使用ES的方式震惊到。这里还是突出ES的灵活性,适用场景广泛。 有点王婆卖瓜的意思,是吧?
But whether your use case is similar to one of these, or you’re using Elasticsearch to tackle a new problem, the way you work with your data, documents, and indices in Elasticsearch is the same.
但是无论你的应用场景跟上面提到类似还是要使用ES解决新的问题,ES内部对数据、文档和索引的方式都是一样的,也就是万变不离其宗。所以我们有必要继续往下面看,继续学习下ES内部对数据的处理方式,什么是文档啊?什么是索引啊?
我们这期就先读到这里,接下来你可以点个赞或者加个关注,鼓励我们一直读下去。
网友评论