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

标签 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 但我无法做出任何假设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/

相关文章:

java - 如何确保 ExecutorService 池已完成而不关闭它?

c - 特定搜索问题的网站 : using C language or not?

javascript - 如何将 span 包裹在元素中的每个文本部分?

javascript - 生成重新格式化的文本列表

Javascript - 每 3 秒更改一次文本和颜色

java - 特殊输入流,仅读取大小数组的倍数

java - 抽屉项目名称显示为 0

java - 为什么除非我在 strings.XML 中添加 XML 占位符,否则我的方法不会显示该值?安卓开发

ruby-on-rails - 如何使用 Rails Ransack 过滤 boolean 属性?

android - SQLite的FTS3如何实现模糊搜索?