gpt4 book ai didi

java - 控制Lucene中文档的磁盘位置

转载 作者:行者123 更新时间:2023-12-01 18:32:39 28 4
gpt4 key购买 nike

有没有办法让 Lucene 以某种预定义的顺序将文档存储在磁盘中?

例如,我的文档具有稀疏但已排序的 ID(即在名为 IDLongField 中)。我想从 Lucene 索引中一一加载它们(排序)。在完美的世界中,只需从 0 迭代到 IndexReader.maxDoc() 并加载 IndexReader.document(i),就会神奇地发生这种情况。

这可能吗?

最佳答案

这可以使用 SortingMergePolicy 来实现。每当发生合并时,它都会对您的文档进行排序。

这是一个示例 ( gist )。

首先,创建一个 SortingMergePolicy:

    boolean ascending = false;
SortField idSortField = new SortField("id", SortField.Type.LONG, ascending);

SortingMergePolicy sortingMP = new SortingMergePolicy(
iwc.getMergePolicy(), new Sort(idSortField));
iwc.setMergePolicy(sortingMP);

然后,您可以按照您喜欢的顺序定期为文档建立索引

    d = new Document();
d.add(new LongField("id", 4, Field.Store.YES));
iw.addDocument(d);

d = new Document();
d.add(new LongField("id", 2, Field.Store.YES));
iw.addDocument(d);

您只需在打开 IndexReader 之前强制合并

    iw.forceMerge(1, true);

现在,如果您打开一个 IndexReader ,您可以从 0 到 IndexReader.maxDoc() 迭代文档,它们将按您的 排序长场.

一些注意事项:

  • 该类位于 lucene-misc ,您可能需要将其添加为附加依赖项
  • API changed在 4.8.0 版本中,需要 Sort 而不是 Sorter
  • 您还可以进行实时排序或离线排序 ( example in the gist )

关于java - 控制Lucene中文档的磁盘位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430775/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com