• 150403

    文章

  • 888

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

elasticsearch 常见面试题总结?


1. 什么是 elasticsearch?

Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式,多用户能力的全文搜索引擎。它是基于 Java 开发的,很方便的使大量数据具有搜索、分析和探索的能力。

2. 实现原理?

  • 首先用户将数据提交到 elasticsearch 的数据库
  • 通过分词控制器将对应的语句分词,将其按照权重和分词结果一并写入数据
  • 当用户搜索数据的时候,再根据权重将结果排名,打分,最后返回结果给用户

3. 说一下 elasticsearch 的倒排索引?

传统的检索方式是通过文章,逐个遍历找到对应关键词的位置,可以看成是通过 key 寻找 value

倒排索引是通过分词的策略,形成词和文章的映射关系表,也称为倒排表,这种 词典 + 映射 即为倒排索引。其中词典中存储着词元,倒排表中存储该词元在哪些文中出现的位置,可以看成是 value 来找 key。有了倒排索引,就能实现 O(1)的复杂度来检索文章了,极大提高了检索的效率。

4. solr 与 elasticsearch 的区别?

相同点:

  • 都是基于 Lucene 实现的

不同点:

  • solr 利用 zookeeper 进行分布式管理,而 elasticsearch 自身带有分布式协调管理功能
  • solr 比 elasticsearch 实现的更加全面, solr 官方提供的功能更多,而 elasticsearch 本身更注重于核心功能,高级功能多由第三方插件提供
  • solr 在传统的搜索应用中表现好于 elasticsearch, 而 elasticsearch 在实时搜索应用方面比 solr 好

5. 在并发的情况下,elasticsearch 如何保持数据读写的一致性?

  • 可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突
  • 写操作,只用当大多数分片可用时才允许写操作。即使大多数可用,也可能因为网络等原因导致写入副本失败,这样该副本被认为时故障,分片将会在不同的节点上重建。
  • 读操作,可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回,如果设置 replication 为 async 时,也可以设置搜索请求参数 _preference 为 primary 来查询主分片,确保文档为最新版本

6. elasticsearch 的搜索过程?

搜索过程一般为两个阶段,即 Query Then Fetch

Query 阶段:
查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。每一个分片在本地执行并构建一个匹配文档的大小为 from + size 的优先队列。(在搜索的时候是会查询 Filesystem Cache 的,但是有部分数据还在 Memory Buffer,所以搜索是近实时的。)每一个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表

Fetch 阶段:
协调节点辨别出哪些文档需要被取回并向相关的分片提交多个 GET 请求。每个分片加载并丰富文档,如果有需要的话,接着返回文档给协调节点。一旦所有的文档被取回了,协调节点返回结果给客户端。


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客