ElasticSearch

搜索引擎(ElasticSearch)是什么?[面试5.0]

Elasticsearch:分布式的全文搜索引擎,主要解决已下几个问题:
解决海量数据中执行搜索时使用如MySql等数据库查询效率低下的问题
解决输入关键字顺序不正确时,同样能搜到正确的数据的问题
解决搜索时不能以特定标记展示的问题(如:红色字体展示)

全文检索:
将一段词语分词并放到分词库,搜索时根据关键字在分词库中检索(也是倒排索引)

解释一下什么是倒排索引?[面试7.0]

就是根据值搜索id,倒过来的,倒排表结构如下:
四川|省|发生|地震
湖南|省|出现|旱灾

termfreqdocid
四川11
湖南12
21,2
发生11
出现12
地震11
旱灾12

倒排表按顺序存储在倒排文件中,倒排文件存在磁盘上

ES的二级索引FST是什么,ES怎么查询数据的?[面试7.0]

在这里插入图片描述

ES查询数据底层原理
由于Lucene会为原始数据中的每个词都生成倒排索引,数据量大,所以倒排索引对应的倒排表被存放在磁盘上,若每次查询都直接读取磁盘的话,会有多次磁盘IO,严重影响查询性能,Lucene便引入了二级索引FST(Finite State Transducer)

FST的结构类似前缀树,其原理如下:
将原本的分词表,拆分成多个Block,每个Block包含25 -48个词(Term),Block的词具有相同前缀(Allen和After组成一个Block)
将每个Block中的公共前缀抽取出来(Allen和After的公共前缀是A),按照类似前缀树的逻辑组合成FST,其叶子节点携带对应Block的首地址
为了加速查询,FST永驻堆内内存,无法被GC回收
用户查询时,先通过关键词(Term)查询内存中的FST,找到该Term对应的Block首地址,再读取磁盘上的倒排表(分词表),将该Block加载到内存,遍历该Block,查找到目标Term对应的DocId,再按照一定的排序规则,生成DocId优先级队列,再按该队列的顺序读取磁盘中的原始数据

ElasticSearch的(from+size)查询数据的原理是什么?[面试6.0]

from+size查询模式二则之和超过1W查询效率会非常低下
1.将用户指定的关键词进行分词
2.将词汇拿到分词库进行检索,得到多个文档id
3.到各个分片中拉取数据
4.将数据根据score进行排序
5.根据from的值,将查询到的数据舍弃一部分
6.返回最终结果

ElasticSearch的(scroll+size)查询数据的原理是什么?[面试6.0]

scroll+size查询模式适合非实时数据的查询,这样查询效率高于from+size
1.将用户指定的关键词进行分词
2.将词汇拿到分词库进行检索,得到多个文档id
3.将文档id存放到ES上下文中
4.根据指定的size个数到ES中检索数据,拿完数据的文档id,就将这些id在上下文中移除
5.若需要下一页数据就直接到ES上下文中找后续内容

搜索引擎(ElasticSearch)底层原理是什么?[面试5.0]

腾讯万亿级Elasticsearch内存效率提升技术解密(什么是FST,中间)[阅10分钟]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023年Java面试宝典

您的鼓励是对我的肯定,共建希望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值