我正在尝试实现最简单的 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
但我无法做出任何假设getIndexWriter(true);
中的 true
是用来做什么的。
通过关注其他一些帖子,iv'e 对 IndexWriter 的创建感到更加困惑。
如果我做错了什么,有人可以让我走上正确的道路吗?
最佳答案
根据您的索引所在的位置(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 足以满足您的要求。
输入参数可能会询问是否应该创建一个新的编写器?
关于java - Lucene 4.0 索引编写器 - 创建单个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678350/