【问题标题】:Why Lucene index is so large?为什么Lucene索引这么大?
【发布时间】:2017-02-17 22:42:16
【问题描述】:

我通过以下方式将文档存储在 Lucene 实例中:

Document doc = new Document();
doc.add(new StringField("title", processor.title, Field.Store.YES));
doc.add(new StringField("annotation", processor.annotation, Field.Store.YES));
doc.add(new TextField("text", processor.text, Field.Store.NO));
w.addDocument(doc);

我不需要将全文存储在索引中,我唯一需要的是能够对文档执行搜索。

问题是我得到的索引与原始文档集的大小几乎相同。这对我来说似乎很奇怪,因为它应该只存储词频。为什么会这样?

【问题讨论】:

  • 您能否添加一些示例文档,以便我们查看原始文档中有多少字段等?此外,一些数字会很好:有多少文档,字段有多大,文档和索引的大小是多少。
  • @DominikSandjaja Documents 具有您可以在问题中看到的三个字段。未存储在索引中的文本大小约为 100K 纯英文文本。
  • 能否提供IndexWriter和IndexWriterConfig是如何创建的?
  • 这么大是什么意思?这是多大?您要在索引中插入多少条目?标题、注释和文本有多长?

标签: java lucene full-text-indexing


【解决方案1】:

这对我来说似乎很奇怪,因为它应该只存储词频。

我认为您误解了存储的内容和存储方式。索引文件格式的Lucene documentation 详细解释。引用概述部分:

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

  • 字段名称。这包含索引中使用的字段名称集。

  • 存储的字段值。对于每个文档,这包含一个属性值对列表,其中属性是字段名称。这些都是 用于存储有关文档的辅助信息,例如其 访问数据库的标题、url 或标识符。存储的集合 字段是搜索时每次命中返回的内容。这是键控 按文件编号。

  • 术语字典。包含在所有文档的所有索引字段中使用的所有术语的字典。字典也 包含包含该术语的文档数量和指针 到词的频率和邻近度数据。

  • 词频数据。对于字典中的每个词条,包含该词条的所有文档的数量,以及出现该词条的频率 如果 omitTf 为假,则该文档中的术语。

  • 术语邻近度数据。对于字典中的每个术语,该术语在每个文档中出现的位置。请注意,这将不存在 如果所有文档中的所有字段都将 omitTf 设置为 true。

  • 归一化因子。对于每个文档中的每个字段,都会存储一个值,该值将乘以该字段的命中分数。

  • 词向量。对于每个文档中的每个字段,可以存储术语向量(有时称为文档向量)。术语向量 由词条文本和词条频率组成。将术语向量添加到您的 索引见字段构造函数

  • 已删除文档。一个可选文件,指示哪些文档被删除。

以上部分内容是可选的,可能不会出现在您的索引中。但是,最小索引将包含“字段名称”、“存储的字段值”、“术语字典”和“术语频率数据”。

其中一些数据结构会根据语料库中不同单词的数量进行扩展。其他则根据文档数量或每个文档的唯一词数进行缩放。

如果您使用单个(相对)较小的文档填充索引,那么某些缩放因子将不利于您。

最后,索引段的物理表示将被设计和优化主要用于快速搜索而不是减少存储空间。这会影响“信息密度”……以及实际使用的存储空间。

【讨论】:

  • 我想知道术语词典,因为英语中的单词有限,但这样一来,它会跨段重复吗?
【解决方案2】:

分析器(标记器和过滤器)应该与您的文本匹配。对于英语,StandardAnalyzer 应该是一个好的开始。

Analyzer analyzer = new StandardAnalyzer(Version.LATEST);
Directory index = FSDirectory.open(new File("index"));
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
IndexWriter writer = new IndexWriter(index, config);

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2011-02-06
    相关资源
    最近更新 更多