Apache Lucene 7.0 - 索引文件格式

这篇具有很好参考价值的文章主要介绍了Apache Lucene 7.0 - 索引文件格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Apache Lucene 7.0 - 索引文件格式


原文地址

介绍

这个文档定义了在这个版本的Lucene中使用的索引文件格式。如果您使用的是不同版本的Lucene,请查询对应版本的文档。

本文档试图提供Apache Lucene文件格式的高级定义。

定义

Lucene的基本概念是索引、文档、字段和术语(分词后的检索词)。

索引包含一系列文档。

文档是一系列字段。

  • 字段是一个命名的术语序列。
  • 术语是一个字节序列。
  • 两个不同字段中的相同字节序列被认为是不同的术语。因此,术语被表示为一对:命名字段的字符串和字段内的字节。

反向索引

索引存储有关术语的统计信息,以便使基于术语的搜索更有效。Lucene的索引属于被称为倒排索引的索引族。这是因为对于一个术语,它可以列出包含它的文档。这与文档列出术语的自然关系相反。

字段类型

在Lucene中,字段可以被存储,在这种情况下,它们的文本以一种非反向的方式逐字存储在索引中。倒置的字段称为索引。一个字段可以被存储和索引。

字段的文本可以被标记成要索引的术语,或者字段的文本可以按字面意思用作要索引的术语。大多数字段都是标记化的,但有时对某些标识符字段进行逐字索引是有用的。

有关Field的更多信息,请参阅Field java文档。

Lucene索引可以由多个子索引或段组成。每个段都是一个完全独立的索引,可以单独搜索。指数的演变:

为新添加的文档创建新的段。

  1. 合并现有段。
  2. 搜索可能涉及多个段和多个索引,每个索引可能由一组段组成。

文档数量

在内部,Lucene通过一个整数文档号来引用文档。添加到索引中的第一个文档编号为0,随后添加的每个文档的编号都比前一个文档大1。

注意文档的编号可能会改变,所以在Lucene之外存储这些编号时要小心。在以下情况下,数字可能会发生变化:

存储在每个段中的数字仅在该段内是唯一的,并且必须在将其用于更大的上下文中之前进行转换。标准技术是根据每个段中使用的数字范围为每个段分配一个值范围。要将文档号从段转换为外部值,需要添加段的基本文档号。为了将外部值转换回特定于段的值,段由外部值所在的范围标识,并减去段的基值。例如,可以组合两个5个文档段,使第一个段的基值为0,第二个段的基值为5。第二部分的文档3的外部值为8。

当文档被删除时,在编号中会产生空白。随着索引在合并过程中的演变,这些最终会被删除。在合并段时删除已删除的文档。因此,新合并的段在编号上没有间隙。

索引结构概述

每个段索引维护如下内容:

  • Segment info.它包含关于一个段的元数据,例如文档的数量,它使用的文件。
  • Field names. 它包含索引中使用的字段名称集。
  • Stored Field values. T对于每个文档,这包含一个属性值对列表,其中属性是字段名。它们用于存储关于文档的辅助信息,例如文档的标题、url或访问数据库的标识符。存储的字段集是在搜索时为每个命中返回的内容。这是由文档号输入的。
  • Term dictionary. 包含所有文档的所有索引字段中使用的所有术语的字典。字典还包含包含该术语的文档数量,以及指向该术语的频率和接近度数据的指针。
  • Term Frequency data. 对于字典中的每个术语,包含该术语的所有文档的编号,以及该术语在该文档中出现的频率,除非省略频率(IndexOptions.DOCS_ONLY)
  • Term Proximity data. 对于字典中的每个术语,表示该术语在每个文档中出现的位置。请注意,如果所有文档中的所有字段都省略位置数据,则不存在此方法。
  • Normalization factors. 对于每个文档中的每个字段,存储一个值,该值乘以该字段的命中分数。
  • Term Vectors. 对于每个文档中的每个字段,都可以存储术语向量(有时也称为文档向量)。术语向量由术语文本和术语频率组成。要在索引中添加术语向量,请参见 Field 构造函数
  • Per-document values.与存储值一样,这些值也是按文档编号键入的,但通常是为了快速访问而加载到主存 储器中。存储值一般用于搜索结果的汇总,而每个文档值则适用于评分因子等。
  • Live documents. 可选文件,说明哪些文件是实时文件。
  • Point values. 可选的一对文件,记录维度索引字段,以实现快速数值范围过滤和大数值,如 BigInteger 和 BigDecimal(1D)以及地理形状交叉(2D、3D)。

文件命名

属于一个段的所有文件具有相同的名称,但扩展名不同。扩展名对应于下面描述的不同文件格式。当使用复合文件格式(小段的默认格式)时,这些文件(段信息文件、锁文件和删除文档文件除外)被折叠成一个.cfs文件(详细信息见下文)。

通常,索引中的所有段都存储在单个目录中,尽管这不是必需的。

文件名永远不会被重用。也就是说,当任何文件保存到目录时,它被赋予一个从未使用过的文件名。这是使用简单的生成方法实现的。例如,第一个片段文件是segments_1,然后是segments_2,等等。生成是一个以字母数字(基数36)形式表示的连续长整数。

文件扩展名摘要

下表总结了 Lucene 中文件的名称和扩展名:

Name Extension Brief Description
Segments File segments_N 存储有关提交点的信息,N随着commit的次数增长而增长
Lock File write.lock 写入锁文件,可防止多个 IndexWriters 向同一文件写入。
Segment Info .si 记录对应段的元数据
Compound File .cfs, .cfe 合并当前段内所有文件生产合并文件,.cfe扩展后缀的合并文件用于记 录合并之前段对应的所有文件的元信息,.cfs扩展后缀的合并文件存储的 是合并前段内所有文件的实际数据
Fields .fnm 记录index对应所有字段的信息
Field Index .fdx doc通过docId来标识被存储在.fdt的文件中,方便快速的查询到docid对 应的数据需要对doc数据做相关的索引位置记录
Field Data .fdt 存储doc数据的文件,只有设置Field.Store.YES的field对应的数据才会 被存储在该文件中
Term Dictionary .tim 术语词典,记录术语信息
Term Index .tip term被记录存储在.tim中,当term数据很大时需要对term进行索引方便 快速定位到对应的term
Frequencies .doc 记录包含每个术语的文档列表以及频率
Positions .pos 记录术语在索引中出现的位置
Payloads .pay 记录额外的每个位置元数据信息,如字符偏移和用户有效载荷
Norms .nvd, .nvm nvd保存索引文档字段的加权因子的数据,搜索时计算相关性的一个系数,nvm保存索引文档字段加权因子的元数据
Per-Document Values .dvd, .dvm dvd保存索引文档的评分因子,也用于存储docValues类型的字段数据,即 列存储(正向索引),dvm保存索引文档的评分因子的元数据
Term Vector Index .tvx 将偏移量存入文件数据文件
Term Vector Data .tvd 包含术语向量数据。
Live Documents .liv 有关实时文件的信息
Point values .dii, .dim 保存索引点(如果有)

锁文件

默认存储在索引目录中的写锁名为“write.lock”。如果锁目录与索引目录不同,那么写锁将被命名为“XXXX-write”。其中XXXX是从索引目录的完整路径派生的唯一前缀。当这个文件存在时,写程序当前正在修改索引(添加或删除文档)。这个锁文件确保一次只有一个写入器在修改索引。文章来源地址https://www.toymoban.com/news/detail-725388.html

到了这里,关于Apache Lucene 7.0 - 索引文件格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch中的数据类型search_as_you_type及查看底层Lucene索引

    search_as_you_type字段类型用于自动补全,当用户输入搜索的时候,还没输完就可以提示用户相关内容。as_you_type应该是说当你打字的时候。它会给索引里的这个类型的字段添加一些子字段_2gram _3gram和_index_prefix。_2gram的意思是,如果一个值是abcd, 2 gram就是ab bc cd, 3 gram就是

    2024年02月12日
    浏览(35)
  • 通过 Lucene.Net 支持的 .NET 索引和搜索引擎的高效使用与探索:Examine 的简单索引与搜索数据应用以及其可扩展性分析

    在当前的技术环境中,搜索和索引数据变得越来越重要,尤其是在处理大量数据时。这就使得我们需要一种能够快速、精确、高效地索引和搜索数据的工具。在本文中,我们将深入探讨一种用于 .NET 的索引和搜索引擎——Examine,这是一个封装了 Lucene.Net 的库,它能使我们更方

    2024年02月16日
    浏览(35)
  • Lucene(9):Lucene优化

    1 解决大量磁盘IO config.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。         数值越大索引速度越快, 但是会消耗更多的内存   indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段         数值越

    2024年02月09日
    浏览(23)
  • Lucene(8):Lucene底层储存结构

    1 详细理解lucene存储结构 存储结构 : 索引(Index) : 一个目录一个索引,在Lucene中一个索引是放在一个文件夹中的。 段(Segment) : 一个索引(逻辑索引)由多个段组成, 多个段可以合并, 以减少读取内容时候的磁盘IO。 Lucene中的数据写入会先写内存的一个Buffer,当Buffer内数据到一定

    2024年02月09日
    浏览(30)
  • Lucene(10):Lucene相关度排序

    1 什么是相关度排序 Lucene对查询和索引文档的相关度进行打分,得分高的就排在前边。 1.1 如何打分 Lucene是在用户进行检索时实时根据搜索的计算出来的,分两步: 计算出词(Term)的权重 根据词的权重值,计算文档相关度得分。 1.2 什么是词的权重 明确索引的

    2024年02月10日
    浏览(30)
  • ElasticSearch与Lucene是什么关系?Lucene又是什么?

    一. ElasticSearch 与 Lucene 的关系 Elasticsearch(ES)和Apache Lucene之间有密切的关系,可以总结如下: Elasticsearch构建于Lucene之上:Elasticsearch实际上是一个分布式的、实时的搜索和分析引擎,它构建在Apache Lucene搜索引擎库的基础上。Lucene提供了全文搜索和索引功能,而Elasticsearch在此

    2024年02月04日
    浏览(29)
  • Lucene轻量级搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装

    1、Lucene 是什么 Lucene 是一个本地全文搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装 Lucene 适合那种轻量级的全文搜索,我就是服务器资源不够,如果上 ES 的话会很占用服务器资源,所有就选择了 Lucene 搜索引擎 2、倒排索引原理 全文搜索的原理是使用了倒排索引,那么什么是倒

    2024年03月15日
    浏览(58)
  • Lucene全文检索

    Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统 Elasticsearch 和 solr 都是基于 lucene 的索引和搜索能力进行。 Solr与Lucene的区别: Solr和Lucene的本质区别三点:搜索服务器,企业级和管理。 Lucene本质上是搜索库,不是独立的应用程序,而Solr是。 Lucene专注于搜索

    2024年02月09日
    浏览(36)
  • springboot 集成 lucene

    简介 数据每分钟产生200条,使用mysql储存。 目前有数据超过700M。 按照日期查询,按月查询包含每次超过20w条以上,时间比较长。 计划使用lucene优化查询,不适用es是因为项目较小,没有更富裕的资源。 基本步骤 引入依赖。 开发工具类。 开发索引功能,完成索引。 开发定

    2024年02月10日
    浏览(22)
  • Lucene入门及操作详解

    我们生活中的数据总体分为两种:结构化数据和非结构化数据。         结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。         非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等磁盘上的文件 常见的结构化数据也就是 数据

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包