Если вы используете .document (i), как в приведенных выше примерах, и пропускаете удаленные документы, будьте осторожны, если вы используете этот метод для разбивки на страницы результатов.То есть: у вас есть 10 документов на страницу и вам нужно получить документы.для страницы 6. Ваш ввод может быть примерно таким: смещение = 60, количество = 10 (документы от 60 до 70).
IndexReader reader = // create IndexReader
for (int i=offset; i<offset + 10; i++) {
if (reader.isDeleted(i))
continue;
Document doc = reader.document(i);
String docId = doc.get("docId");
}
У вас будут некоторые проблемы с удаленными, потому что вы не должны начинатьот смещения = 60, но от смещения = 60 + количество удаленных документов, которые появляются до 60.
Альтернатива, которую я нашел, выглядит примерно так:
is = getIndexSearcher(); //new IndexSearcher(indexReader)
//get all results without any conditions attached.
Term term = new Term([[any mandatory field name]], "*");
Query query = new WildcardQuery(term);
topCollector = TopScoreDocCollector.create([[int max hits to get]], true);
is.search(query, topCollector);
TopDocs topDocs = topCollector.topDocs(offset, count);
примечание: заменить текст[[]] со своими значениями.Запустил это на большом индексе с 1,5 миллионами записей и получил случайные 10 результатов менее чем за секунду.Согласен медленнее, но, по крайней мере, вы можете игнорировать удаленные документы, если вам нужно разбить на страницы.