ES基本概念(未完成)
倒排索引
在搜索引擎中,每个文档都有对应的文档 ID,文档内容可以表示为一系列关键词的集合,例如,某个 文档经过分词,提取了 20 个关键词,而通过倒排索引,可以记录每个关键词在文档中出现的次数和出 现位置。也就是说,倒排索引是 关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文 件中都出现了该关键词。
倒排索引由两部分组成
- 单词字典:由B+树或者哈希拉链表实现,存储单词
- 倒排列表:包含文档id,词频,位置,偏移量
倒排索引虽然可以提高搜索性能,但也存在缺陷,比如我们需要对数据做排序或聚合等操作时, lucene 会提取所有出现在文档集合的排序字段,然后构建一个排好序的文档集合,而这个步骤是基于 内存的,如果排序数据量巨大的话,容易造成内存溢出和性能缓慢。
doc_values 就是 es 在构建倒排索引的同时,会对开启 doc_values 的字段构建一个有序的 “document文档 ==> field value” 的列式存储映射,可以看作是以文档维度,实现了根据指定字段进行 排序和聚合的功能,降低对内存的依赖。另外 doc_values 保存在操作系统的磁盘中,当 doc_values 大 于节点的可用内存,ES可以从操作系统页缓存中加载或弹出,从而避免发生内存溢出的异常,但如果 docValues 远小于节点的可用内存,操作系统就自然将所有 doc_values 存于内存中(堆外内存),有 助于快速访问。
基本组成
-
索引(index):一个拥有相似特征的文档的集合,类比数据库的数据表
-
文档(document):可搜索的最小范围,一般是json格式,含有多个字段(field)
-
类型(type):已被废弃
-
Mapping(映射):定义字段,类型,优化信息,分词器等,一个index只有一个mapping
-
node:服务节点,一个es实例
-
cluster:多个node的集合
-
shard:index分割存储在不同节点中提高吞吐量和性能
-
replica:index副本
-
DSL:基于json查询语言
支持的数据类型
- 基本类型:
- 关键字: keyword,constant_keyword,wild_card
- 数值型:integer,long,short,byte,double,float等
- 布尔型:boolean
- 日期型:date
- 二进制:binary
- 结构化数据类型:
- 范围型
- 版本
- ip
- 文字搜索类型:
- 非结构化文本:text
- 对象和关系类型:
- 嵌套类型:nested,join
- 对象类型:object
keyword和text区别
两个类型的区别主要是分词:keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,所以 keyword类型的字段只能通过精确值搜索到;Text 类型在存入 Elasticsearch 的时候,会先分词,然后 根据分词后的内容建立倒排索引
nested数据
允许对象数组以相互独立的方式进行索引,能够避免数组扁平化处理,多字段数组笛卡尔积化导致查到不存在的数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构