Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 控制Lucene中文档的磁盘位置_Java_Lucene - Fatal编程技术网

Java 控制Lucene中文档的磁盘位置

Java 控制Lucene中文档的磁盘位置,java,lucene,Java,Lucene,有没有办法让Lucene按照预定义的顺序将文档存储在磁盘中 例如,我有一些ID稀疏但已排序的文档(即在名为ID的LongField中)。我想从Lucene索引中一个接一个地加载它们。在一个完美的世界中,只要从0迭代到IndexReader.maxDoc()并加载IndexReader.document(i),这种情况就会神奇地发生 这是可能的吗?这是可能的,可以使用在合并时对文档进行排序的 下面是一个例子() 首先,创建排序合并策略: boolean ascending = false;

有没有办法让Lucene按照预定义的顺序将文档存储在磁盘中

例如,我有一些ID稀疏但已排序的文档(即在名为
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版本中,如果是
    分拣机
  • 您还可以执行实时排序或脱机排序()

这与磁盘位置有什么关系?@EJP最小化磁盘随机访问。这与磁盘位置有什么关系?@EJP最小化磁盘随机访问。