2015-04-05 4 views
0

В 5 минут урока после получения списка совпаденийУстановить Lucene документ произвольного идентификатора

ScoreDoc[] hits = collector.topDocs().scoreDocs; 

Документы получены с использованием

for(int i=0;i<hits.length;++i) { 
    int docId = hits[i].doc; 
    Document d = searcher.doc(docId); 
    System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title")); 
} 

Так я вижу, что scoreDoc.doc является docId. Есть ли способ установить docId на произвольное значение при индексировании?

ответ

0

Nope. И вы должны также никогда полагаться на них, поскольку они могут измениться при обновлении документа или слиянии сегментов, например.

The FAQ говорит:

Документы могут быть повторно пронумерованы в любое время с помощью Lucene
Если требуется постоянный идентификатор документа, а затем добавить его в качестве поля для ваших документов.

Поэтому, если вам нужно иметь известный идентификатор, просто добавьте другое поле в документ. Убедитесь, что поле сохранено, а затем извлечет его значение из результатов поиска.

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

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