ES为什么快,什么是倒排索引
ES为什么快,什么是倒排索引
什么是文档和词条
- 每一条数据就是一个文档
- 对文档中的内容分词,得到的词语就是词条
什么是正向索引
基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条
什么是倒排索引
对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时可以现根据词条查询到文档id,而后获取到文档
例子
比如有一个华为手机,小米手机,苹果手机,三条数据
我们如果存入关系型数据库,比如mysql,MySQL 主要使用 B+树 来实现索引。当我们对这个字段创建索引的时候,Mysql会生成一个B+树结构,其中每个节点包含一个品牌数据的指针,指向对应的记录。查询时,mysql会在B+树中查找匹配的键值,代码如下
SELECT * FROM phones WHERE brand LIKE '%手机%';
在 Elasticsearch 中,我们会先定义一个索引并存储数据:
PUT /phones
{
"mappings": {
"properties": {
"brand": {
"type": "text"
}
}
}
}
POST /phones/_doc
{ "brand": "华为手机" }
POST /phones/_doc
{ "brand": "小米手机" }
POST /phones/_doc
{ "brand": "苹果手机" }
ES使用倒排索引来加速文本搜索,在倒排索引中,对于每个唯一的词(小米,手机,华为,苹果)都会维护一个该词出现的位置
例如,倒排索引的结构可能如下:
- “华为” → [文档1]
- “小米” → [文档2]
- “苹果” → [文档3]
- “手机” → [文档1, 文档2, 文档3]
倒排索引与 MySQL 索引的区别
索引类型:
Mysql:使用B+树结构,适合范围查询和精准匹配,但对文本搜索的支持较弱
ES:使用倒排索引,专为快速文本搜索而设计,适合处理大规模的非结构化数据。
查询效率:
mysql中,like关键字,如果不符合最左匹配原则,即后缀或中间匹配,则会走全表扫描,性能很差
es中,借助倒排索引快速定位包含特定关键字的文档

浙公网安备 33010602011771号