0

最も単純な 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()IndexWritertruegetIndexWriter(true);

他の投稿のiv'eに従うことで、IndexWriterの作成に関してさらに混乱しました。

私が何か間違ったことをしている場合、誰かが私を正しい道に導いてくれますか?

4

1 に答える 1

3

インデックス(RAMまたはファイルシステム)の場所に応じて、さまざまなindexWriterを開くことができます。インデックスをファイルシステムに書き込もうとしていると仮定すると、次のようになります。

public static final Version luceneVersion = Version.LUCENE_40;

IndexWriter getIndexWriter(){

    Directory indexDir = FSDirectory.open(new File( INDEX_PATH ));

    IndexWriterConfig luceneConfig = new IndexWriterConfig(
                luceneVersion, new StandardAnalyzer(luceneVersion));

    return(new IndexWriter(indexDir, luceneConfig));
   }

アナライザークラス「StandardAnalyzer」に注意してください。アプリケーションの要件に応じてアナライザーを選択する必要があります。StandardAnalyzerはあなたがやりたいことには十分だと思います。

入力引数は、新しいライターを作成する必要があるかどうかを尋ねる可能性がありますか?

于 2012-07-26T22:48:06.013 に答える