概念
本页定义了与 OpenSearch 相关的关键术语和概念。
基本概念
- 文档:OpenSearch 中的基本信息单元,以 JSON 格式存储。
- 索引:相关文档的集合。
- JSON (JavaScript 对象表示法):一种用于在 OpenSearch 中存储数据的文本格式,将信息表示为键值对。
- 映射:索引的模式定义,指定文档及其字段的存储和索引方式。
集群架构
- 节点:OpenSearch 集群中的单个服务器。
- 集群:协同工作的 OpenSearch 节点集合。
- 集群管理器:负责管理集群范围操作的节点。
- 分片:索引数据的一个子集;索引被分成多个分片,以便在节点间分发。
- 主分片:包含索引数据的原始分片。
- 副本分片:主分片的副本,用于冗余和提高搜索性能。
数据结构和存储
- Doc values:一种磁盘上的数据结构,用于高效地排序和聚合字段值。
- 倒排索引:一种将单词映射到包含它们的文档的数据结构。
- Lucene:OpenSearch 用于索引和搜索数据的底层搜索库。
- 段:分片内不可变的数据存储单元。
数据操作
文本分析
- 文本分析:将文档的非结构化自由文本内容拆分为一系列词元的过程,这些词元随后存储在倒排索引中。
- 分析器:一个处理文本以供搜索的组件。分析器将文本转换为存储在倒排索引中的词元。
- 分词器:分析器的一个组件,它将文本分割成单独的词元(通常是单词)并记录其位置的元数据。
- 词元过滤器:分析器的最终组件,它在分词后修改、添加或删除词元。示例包括小写转换、停用词删除和同义词添加。
- 词元:在文本分析过程中由分词器创建的文本单元。词元可以被词元过滤器修改,并包含文本分析过程中使用的元数据。
- 词项:直接存储在倒排索引中并用于搜索操作期间匹配的数据值。词项具有最少的关联元数据。
- 字符过滤器:分析器的第一个组件,它通过在分词之前添加、删除或修改字符来处理原始文本。
- 归一化器:一种特殊的分析器,无需分词即可处理文本。它只能执行字符级操作,不能修改整个词元。
- 词干提取:将单词还原为其词根或基本形式(称为词干)的过程。
搜索和查询概念
- 查询:向 OpenSearch 发出的请求,描述您正在数据中搜索的内容。
- 查询子句:查询中的单个条件,指定匹配文档的标准。
- 过滤器:一个查询组件,用于查找精确匹配而不进行评分。
- 过滤上下文:过滤上下文中的查询子句会提出问题:“文档是否与查询子句匹配?”
- 查询上下文:查询上下文中的查询子句会提出问题:“文档与查询子句的匹配程度如何?”
- 全文搜索:分析和匹配文本字段的搜索,考虑单词形式的变化。
- 关键词搜索:需要精确文本匹配的搜索。
- 查询领域特定语言 (DSL):OpenSearch 的主要查询语言,用于创建复杂、可定制的搜索。
- 查询字符串查询语言:一种简化的查询语法,可用于 URL 参数。
- Dashboards 查询语言 (DQL):一种简单的基于文本的查询语言,专门用于在 OpenSearch Dashboards 中过滤数据。
- 管道处理语言 (PPL):一种使用管道语法(
|
)链接命令进行数据处理和分析的查询语言。主要用于 OpenSearch 中的可观测性用例。 - 相关性得分:表示文档与查询匹配程度的数字。
- 聚合:根据搜索查询分析和汇总数据的一种方式。
向量搜索概念
请参阅向量搜索概念。
高级概念
以下部分介绍了更高级的 OpenSearch 概念。
更新生命周期
更新操作的生命周期包括以下步骤
- 主分片接收到一个更新并将其写入分片的事务日志(translog)。translog 在更新被确认之前会被刷新到磁盘(随后进行 fsync)。这保证了持久性。
- 该更新还会传递给 Lucene 索引写入器,后者将其添加到内存缓冲区中。
- 在刷新操作时,Lucene 索引写入器将内存缓冲区刷新到磁盘(每个缓冲区都成为一个新的 Lucene 段),并在生成的段文件上打开一个新的索引读取器。此时,更新可供搜索。
- 在刷新操作时,分片对 Lucene 段执行 fsync。由于段文件是更新的持久化表示,因此不再需要 translog 来提供持久性,因此可以从 translog 中清除更新。
Translog
当文档写入 translog 且 translog 刷新到磁盘时,索引或批量调用会响应,从而确保更新的持久性。直到执行刷新操作后,更新才能对搜索请求可见。
刷新
OpenSearch 会定期执行刷新操作,将内存中的 Lucene 索引中的文档写入文件。这些文件不保证持久性,因为未执行 fsync
。刷新使文档可供搜索。
刷新
刷新操作使用 fsync
将文件持久化到磁盘,确保持久性。刷新确保仅存储在 translog 中的数据记录在 Lucene 索引中。OpenSearch 根据需要执行刷新,以确保 translog 不会变得过大。
合并
在 OpenSearch 中,分片是一个 Lucene 索引,由段(或段文件)组成。段存储索引数据且不可变。较小的段会定期合并为较大的段。合并减少了每个分片的总段数,释放了磁盘空间,并提高了搜索性能。最终,段达到合并策略中指定的最大大小,并且不再合并为更大的段。合并策略还指定了合并执行的频率。