ES基本概念(未完成)

倒排索引

在搜索引擎中,每个文档都有对应的文档 ID,文档内容可以表示为一系列关键词的集合,例如,某个 文档经过分词,提取了 20 个关键词,而通过倒排索引,可以记录每个关键词在文档中出现的次数和出 现位置。也就是说,倒排索引是 关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文 件中都出现了该关键词。
倒排索引由两部分组成

  1. 单词字典:由B+树或者哈希拉链表实现,存储单词
  2. 倒排列表:包含文档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数据

允许对象数组以相互独立的方式进行索引,能够避免数组扁平化处理,多字段数组笛卡尔积化导致查到不存在的数据

posted @   hwh405  阅读(7)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示