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();
 }

使用了一些未定义的方法。

对于像我这样的初学者来说有点混乱。

我只想创建一个索引。我认为getIndexWriter(true);并且closeIndexWriter()是一些实用方法只是为了得到IndexWriter,但我不能对它的用途做出任何true假设getIndexWriter(true);

通过关注其他一些帖子,我对 IndexWriter 的创建感到更加困惑。

如果我做错了什么,有人可以让我走上正确的道路吗?

4

1 回答 1

3

好吧,取决于您的索引(RAM 或文件系统)在哪里,您可以打开不同的 indexWriters。假设您正在尝试将索引写入文件系统,您应该具有以下内容:

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 回答