Действительно ли возможно выполнить итерации через документы, хранившие в Индексе Lucene?

У меня есть некоторые документы, хранившие в индексе Lucene с docId полем. Я хочу получить весь docIds, сохраненный в индексе. Существует также проблема. Количество документов - приблизительно 300 000, таким образом, я предпочел бы получать этот docIds в блоках размера 500. Действительно ли возможно сделать так?

22
задан Eugeniu Torica 22 February 2010 в 15:19
поделиться

2 ответа

IndexReader reader = // create IndexReader
for (int i=0; i<reader.maxDoc(); i++) {
    if (reader.isDeleted(i))
        continue;

    Document doc = reader.document(i);
    String docId = doc.get("docId");

    // do something with docId here...
}
47
ответ дан 29 November 2019 в 03:34
поделиться

C, C++ и Ada упоминаются здесь (да, авторы не могут оприходовать «Ada»). Код C может быть записан вручную или сгенерирован с помощью Scade .

-121--2270220-

Я занимался той же проблемой. До сих пор моим лучшим решением было получить идентификатор родительского процесса (getppid ()) и использовать его во временном файле, в который я могу поместить список файлов из commitinfo. Этот родительский идентификатор, по-видимому, одинаков для процесса verifymsg (по крайней мере, в AIX). Удачи.

-121--4860182-

Номера документов (или идентификаторы) будут следующими числами от 0 до IndexReader.maxDoc () -1. Эти номера не являются постоянными и допустимы только для открытого IndexReader. Можно проверить, удален ли документ с помощью метода IndexReader.isDeleted (int documentNumber)

2
ответ дан 29 November 2019 в 03:34
поделиться