Почему «удалить документ» в Lucene 2.4 не работает? - PullRequest
2 голосов
/ 01 сентября 2009

Я хочу удалить документ в Lucene 2.4 с Java. Мой код

  Directory directory = FSDirectory.getDirectory("c:/index");
  IndexReader indexReader = IndexReader.open(directory);
  System.out.println("num="+indexReader.maxDoc());
  indexReader.deleteDocuments(new Term("name","1"));
  System.out.println("num="+indexReader.maxDoc());

 output 
         num=1
         num=1     

Ответы [ 2 ]

5 голосов
/ 01 сентября 2009

По моему мнению, лучше всего использовать Indexwriter для удаления документов, поскольку Indexreader буферизирует удаления и не записывает изменения в индекс до тех пор, пока не будет вызвана close () . ; если вы не используете ту же ссылку для поиска.

Lucene wiki сообщает

Обычно лучше всего использовать IndexWriter для удалений, если только

необходимо удалить по номеру документа

вам нужны ваши поиски, чтобы немедленно отразить удаление или

вы должны знать, сколько документов были удалены для данного вызов deleteDocuments

Я вижу, что вы хотите значение maxdoc для документа в памяти, поэтому лучше использовать Indexwriter

поэтому ответ на ваш вопрос

Вы должны закрыть объект Indexreader или использовать Indexwriter для удаления

3 голосов
/ 01 сентября 2009

maxDoc() не изменится, пока вы не оптимизируете индекс, используя IndexWriter. По крайней мере, вам нужно commit(), иначе ваше удаление может даже не попасть на диск.

Однако numDocs() должен возвращать количество не удаленных документов даже до фиксации или оптимизации.

Вероятно, лучше (и, конечно, менее запутанно) использовать IndexWriter для добавления и удаления документов и открывать IndexReader только для чтения; 3.0 по умолчанию откроет их только для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...