正文
郑重声明:漫画人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。
欢迎大家转发文章,谢谢!
小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了。
对小史面试情况感兴趣的同学可以观看
面试现场系列
。
随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节。
但是由于小史很久没有背过诗词了,飞一个字很难说出一句,很多之前很熟悉的诗句也想不起来。
【倒排索引】
吕老师:但是我让你说出带“前”字的诗句,由于没有索引,你只能遍历脑海中所有诗词,当你的脑海中诗词量大的时候,就很难在短时间内得到结果了。
【索引量爆炸】
【搜索引擎原理】
【elasticsearch简介】
吕老师:但是
lucene
还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于
lucene
进行封装,写出了
elasticsearch
。
【elasticsearch基本概念】
吕老师:类型是用来定义数据结构的,你可以认为是
mysql
中的一张表。文档就是最终的数据了,你可以认为一个文档就是一条记录。
吕老师:比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫
poems
的索引,然后创建一个名叫
poem
的类型,类型是通过
mapping
来定义每个字段的类型,比如诗题、作者、朝代都是
keyword
类型,诗内容是
text
类型,而字数是
integer
类型,最后就是把数据组织成
json
格式存放进去了。
吕老师:这个问题问得好,这涉及到分词的问题,
keyword
类型是不会分词的,直接根据字符串内容建立反向索引,
text
类型在存入
elasticsearch
的时候,会先分词,然后根据分词后的内容建立反向索引。
吕老师:之前我们说过,
elasticsearch
把操作都封装成了
http
的
api
,我们只要给
elasticsearch
发送
http
请求就行。比如使用
curl -XPUT '
http://ip:port/poems
'
,就能建立一个名为
poems
的索引,其他操作也是类似的。
【elasticsearch分布式原理】
吕老师:没错,
elasticsearch
也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和
hdfs
是一样的,都是为了保证分布式环境下的高可用。
吕老师:没错,在
elasticsearch
中,节点是对等的,节点间会通过自己的一些规则选取集群的
master
,
master
会负责集群状态信息的改变,并同步给其他节点。
吕老师:注意,只有建立索引和类型需要经过
master
,数据的写入有一个简单的
routing
规则,可以
route
到集群中的任意节点,所以数据写入压力是分散在整个集群的。
【elk系统】