Lucene 4.0索引编写器 - 创建单个索引

时间:2012-07-26 21:33:30

标签: java search text lucene

我正在尝试实现最简单的lucene搜索。我跟着this作为我的起点。

我可以理解示例代码:

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);中的{{1}}进行任何假设用于。

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

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

1 个答案:

答案 0 :(得分:3)

根据您的索引(RAM或FileSystem)的位置,您可以打开不同的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足以满足您的需求。

输入参数可能会询问是否应该创建新的编写器?