[面试]ES、CH

一、基本概念

1.1 什么是Elasticsearch

非关系型数据库,ES是基于Restful的分布式实时全文搜索引擎,可以快速存储、查询、分析海量的数据。

1.2 ES的好处

1.传统数据库模糊查询不走索引,当数据量很大时,查询效率非常低下
2.ES搜索可以对搜索词进行自动分词等处理,更容易查询到相关内容
3.使用的倒排索引,实现了比关系型数据库更快的查询效率

二、底层算法

2.1 倒排索引

倒排索引是一种数据结构
ES是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。

  • 创建索引

(1)把每个文档拆分为独立的词
(2)创建一个包含所有且不重复的词条列表
(3)记录每个词条出现在那些文档中

  • 搜索时

(1)搜索时,直接根据词,返回对应的文章ID

在这里插入图片描述

2.2 正排索引

2.2.1 为什么要用正排索引?

正排索引主要用于实现 根据指定字段进行排序和聚合的功能。
假如我们需要对数据做一些聚合操作,比如排序时,lucene会将所有匹配到的文档读入到内存,再进行排序,如果排序数据量巨大的话,非常容易造成内存溢出。
而正排索引类似于数据库key-value-value,可以只读取id和排序字段到内存进行排序。

2.2.2 ES中正排索引由哪几种?如何自定义排序?关闭正排索引?

ES 中的正排索引有两种:FieldData和DocValues
FieldData是存在内存的,DocValues存在磁盘中,后者不支持text类型字段的排序

自定义排序需要用到正排索引,DocValues是默认开启的,可以直接用,但不支持对text类型字段的排序。FieldData是默认关闭的,需要设置mapping开启

DocValues是存在磁盘的,会占用很多磁盘空间,也会影响搜索速度,如果不需要该字段聚合、排序、聚合的话,可以通过设置mapping给关闭掉

2.2.3 ES是如何利用正排和倒排索引的?

【生成文档】
ES在生成文档时,会分别生成倒排索引和正排索引
【搜索】
ES会先用倒排索引找到文档,然后用正排索引聚合排序等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值