最も単純な lucene 検索を実装しようとしています。私はこれを出発点として従いました。
サンプルコードを理解できます:
public static void indexHotel(Hotel hotel) throws IOException {
IndexWriter writer = (IndexWriter) getIndexWriter(false);
Document doc = new Document();
doc.add(new Field("id", hotel.getId(), Field.Store.YES,
Field.Index.NO));
doc.add(new Field("name", hotel.getName(), Field.Store.YES,
Field.Index.TOKENIZED));
doc.add(new Field("city", hotel.getCity(), Field.Store.YES,
Field.Index.UN_TOKENIZED));
doc.add(new Field("description", hotel.getDescription(),
Field.Store.YES,
Field.Index.TOKENIZED));
String fullSearchableText = hotel.getName() + " " + hotel.getCity() + " " + hotel.getDescription();
doc.add(new Field("content", fullSearchableText,
Field.Store.NO,
Field.Index.TOKENIZED));
writer.addDocument(doc);
}
このコードで得られないのは、何をするかgetIndexWriter(false)
です。この方法は、私がフォローした投稿のどこにも言及されていません。さらに別のコードブロックで:
public void rebuildIndexes() throws IOException {
//
// Erase existing index
//
getIndexWriter(true);
//
// Index all hotel entries
//
Hotel[] hotels = HotelDatabase.getHotels();
for(Hotel hotel: hotels) {
indexHotel(hotel);
}
//
// Don’t forget to close the index writer when done
//
closeIndexWriter();
}
いくつかの未定義のメソッドが使用されています。
私のような初心者には少し混乱します。
インデックスを 1 つだけ作成したい。私は、取得するためのいくつかのユーティリティメソッドだgetIndexWriter(true);
と思いますが、それが何のために使用されるかについては、何の仮定もできません。closeIndexWriter()
IndexWriter
true
getIndexWriter(true);
他の投稿のiv'eに従うことで、IndexWriterの作成に関してさらに混乱しました。
私が何か間違ったことをしている場合、誰かが私を正しい道に導いてくれますか?