我正在尝试实现最简单的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感到更加困惑。
如果我做错了什么,有人可以把我放在正确的道路上吗?
答案 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足以满足您的需求。
输入参数可能会询问是否应该创建新的编写器?