Перебирать все невостребованные документы в индексе Lucene (.Net) - PullRequest
1 голос
/ 02 декабря 2010

Я хочу получить количество всех не удаленных документов индекса Lucene (.Net 2.4), а затем прочитать мои сохраненные поля всех или диапазона этих документов.После прочтения справки Lucene я не совсем уверен, возвращает ли IndexReader.NumDocs () счетчик всех документов или только не восстановленных.Могу ли я просто выполнить итерацию по IndexReader.Document [] и он содержит удаленные документы?

Если NumDocs () и Docmuent [] содержит , содержат как удаленные, так и не восстановленные документы, я полагаю,должны сделать что-то вроде этого:

int totalCount = reader.NumDocs();
int totalCountUndeleted = totalCount;
for (int iDoc = 0; iDoc < totalCount; iDoc++)
  if (reader.IsDeleted(iDoc))
    totalCountUndeleted--;

for (int iDoc = 0; iDoc < totalCount; iDoc++)
{
  if (!reader.IsDeleted(iDoc))
  {
     Document doc = reader.Document(iDoc);
     // read fields
  }
}

Это правильный путь или есть какой-либо другой возможный путь?Спасибо

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

IndexReader.NumDocs выдаст вам количество активных документов.IndexReader.MaxDoc - это номер на один больше максимального номера документа в индексе.Следующий код будет читать все активные документы в индексе.

int max = reader.MaxDoc();
for (int iDoc = 0; iDoc < max; iDoc++)
{
  if (!reader.IsDeleted(iDoc))
  {
     Document doc = reader.Document(iDoc);
     // read fields
  }
}
0 голосов
/ 02 декабря 2010

Это правильный путь.Пока вы не оптимизируете свой индекс, документы не будут удалены.

В качестве альтернативы, если у вас есть запрос типа *:*, который соответствует всем документам, вы можете запустить его вместо этого.Метод запроса, вероятно, будет несколько медленнее, но, возможно, более стандартным.

...