天天看点

elasticsearch漫步走 - 第一章 - 为什么elasticsearch搜索这么快?先认识一下elasticsearchelasticsearch的原理Tips - 查看分词结果

为什么elasticsearch搜索这么快

  • 先认识一下elasticsearch
  • elasticsearch的原理
    • 分布式文件系统
    • 倒排索引
  • Tips - 查看分词结果

先认识一下elasticsearch

  • 还是逃避不了上来吹一波elasticsearch的牛逼之处,还有它有完整的生态圈。elasticsearch最开始是一个分布式的检索引擎,现在把分析也加上了,看来是越来越牛逼了。还和阿里合作了,可以去阿里云去看看。其相关的生态圈,数据导入有logstash,导入日志有beats。数据存储、检索、分析就是它本身,数据展示用kibana(完美契合)。 ELK体系已经烂大街,可自行去百度。
  • 远古时代,介绍elasticsearch是近实时检索,现在把近都去掉了,直接就是实时检索。本人也使用过,通过配置的确可以做到实时(因为感知不到延迟),但是还是要考虑性能问题(这个以后会讲到)。
  • 能很好存储结构化、非结构化、地理位置、数字等,也提供了友好的查询方式,分析方法等。的确有很多很多的应用场景可以应用得到。

(1)Add a search box to an app or website(just search)

(2)Store and analyze logs, metrics, and security event data(日志就用elastic不会错)

(3)Use machine learning to automatically model the behavior of your data in real time(机器学习和我也有关呢)

(4)Automate business workflows using Elasticsearch as a storage engine(存储的事情我也可以干)

(5)Manage, integrate, and analyze spatial information using Elasticsearch as a geographic information system (GIS)(在GIS上面有很好的应用)

(6)Store and process genetic data using Elasticsearch as a bioinformatics research tool(生物工程也有涉猎)

上面就是官方文档里面提到的内容。如果业务场景类似,就可以考虑使用elasticsearch罗。

elasticsearch的原理

不太想吹elasticsearch的牛逼,反正大家应该知道这个检索引擎的确是快。但是为什么这么快呢,也是值得好好研究一下的。一直只知道是分布式文件系统,数据以文件形式存储,存储在集群的各个节点上,然后分开进行检索然后合并,支持横向扩展等。使用的是倒排索引,所以查询很快。我还是把这些模糊或者明确的概念好好整理一下,梳理一下知识,对自己或者其他客官也是极好的。下面介绍elasticsearch几个重要的概念,了解之后,可能对它会有更深刻的认识和了解

分布式文件系统

架构上的设计就使检索计算速度很快。

分布式目前是大数据最常见的技术之一,很多地方都有应用。

分布式文件系统,文件系统管理的物理资源不在同一个服务器或者节点上,可以通过计算机网络与节点相连(可以看成网吧,有一台主机可以通过网络给网吧内所有机器发送消息);或是若干不同的逻辑磁盘分区或者卷标组合在一起形成的完整有层次的文件系统。Elasticsearch的叫法是集群,其实概念差不多。

为什么能这么快。举个例子,如果有100本书,给1个人读,可能要100天。 但是如果100本书给10个人一起读,10天就可以完成了。这样是不是很快呢。但是需要有一个领袖(master),它要分配任务,把哪些书给哪个人,给多少本书,每个人读完书后要把心得体会进行汇总。总需要一个领导去调度安排。不管是Elasticsearch还是分布式系统,肯定都会有一个master去调度任务。

倒排索引

检索原理的设计使其在每个节点上查询文档的时候很快。

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。

官方文档有说明:倒排索引

感觉说得还是没那么具体,我只能从网上找找罗。

(1)l lucene首先对原始文档数据进行编号(DocID),形成列表,就是一个文档列表

elasticsearch漫步走 - 第一章 - 为什么elasticsearch搜索这么快?先认识一下elasticsearchelasticsearch的原理Tips - 查看分词结果

(2)创建倒排索引列表l 然后对文档中数据进行分词,得到词条。对词条进行编号,以词条创建索引。然后记录下包含该词条的所有文档编号(及其它信息)。

elasticsearch漫步走 - 第一章 - 为什么elasticsearch搜索这么快?先认识一下elasticsearchelasticsearch的原理Tips - 查看分词结果

谷歌之父–> 谷歌、之父

倒排索引创建索引的流程:

1) 首先把所有的原始数据进行编号,形成文档列表

2) 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。搜索的过程:当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。然后根据这些编号去文档列表中找到文档。

来源

简单来说:把字段的内容根据一定分词方式(一元、多元分词、中文分词ik等等),分词完后,形成词的集合,突然想到nlp中的词袋模型了(开个小差)。词的集合中不但记录了词,还记录了词的频次、位置(offset偏移量)等等。 查询的时候,只需要命中词集合,就能知道有命中多少词,每个词的位置在哪里。good!!这就告诉我们一个道理,把有利于提高效率的事情做在前面(数据导入时,所以用户无法感知),用户只知道检索很快。 偶尔回想一下,的确做得高明。

Tips - 查看分词结果

来个小技巧:

查询分词结果

索引名称/_analyze

{“text”:“我是中国人”}

elasticsearch漫步走 - 第一章 - 为什么elasticsearch搜索这么快?先认识一下elasticsearchelasticsearch的原理Tips - 查看分词结果

就到这里了吧。see UUU

elasticsearch-intro 官网地址

继续阅读