2012-03-07 2 views
4

Мое приложение генерирует уникальный идентификатор для каждой строки для индексации в lucene и сохранения в базе данных. Один сут, если есть и строка имеет один и тот же идентификатор, я хочу обновить его, а не вставлять новую строку и индекс.Как установить поле, чтобы сохранить уникальную строку в lucene?

Как это сделать?

ответ

8

Это точно цель метода IndexWrite#updateDocument. Первый аргумент - это термин, который должен быть уникальным в вашем индексе.

Например,

String id = "42"; 
Document doc = new Document(); 
Field field = new Field("id", id, Store.YES, Index.NOT_ANALYZED); 
doc.add(field); 

indexWriter.updateDocument(new Term("id", id), doc); 

гарантирует, что doc является единственным документом, с идентификатором 42 в индексе.

+0

Если идентификатор не существует, он будет вставляться? – Shisoft

+1

Да. В документации указано: «Обновляет документ, сначала удаляя документ (ы), содержащий термин, а затем добавляя новый документ». поэтому в конкретном случае, когда документ не был проиндексирован с тем же идентификатором до этого, ни один документ не будет удален. – jpountz

Смежные вопросы