Java 控制Lucene中文档的磁盘位置
有没有办法让Lucene按照预定义的顺序将文档存储在磁盘中 例如,我有一些ID稀疏但已排序的文档(即在名为Java 控制Lucene中文档的磁盘位置,java,lucene,Java,Lucene,有没有办法让Lucene按照预定义的顺序将文档存储在磁盘中 例如,我有一些ID稀疏但已排序的文档(即在名为ID的LongField中)。我想从Lucene索引中一个接一个地加载它们。在一个完美的世界中,只要从0迭代到IndexReader.maxDoc()并加载IndexReader.document(i),这种情况就会神奇地发生 这是可能的吗?这是可能的,可以使用在合并时对文档进行排序的 下面是一个例子() 首先,创建排序合并策略: boolean ascending = false;
ID
的LongField
中)。我想从Lucene索引中一个接一个地加载它们。在一个完美的世界中,只要从0
迭代到IndexReader.maxDoc()
并加载IndexReader.document(i)
,这种情况就会神奇地发生
这是可能的吗?这是可能的,可以使用在合并时对文档进行排序的
下面是一个例子()
首先,创建排序合并策略:
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()
,它们将按LongField
排序
请注意:
- 该类位于中,您可能必须将其作为附加依赖项添加
- 在4.8.0版本中,如果是
分拣机
- 您还可以执行实时排序或脱机排序()
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()
,它们将按LongField
排序
请注意:
- 该类位于中,您可能必须将其作为附加依赖项添加
- 在4.8.0版本中,如果是
分拣机
- 您还可以执行实时排序或脱机排序()