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中,借助倒排索引快速定位包含特定关键字的文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
2021-11-04 java发送邮件
2021-11-04 IDEA 错误 找不到或无法加载主类(完美解决)