【问题标题】:Lucene 4.0 Index writer - creating single indexLucene 4.0 索引编写器 - 创建单个索引
【发布时间】:2012-07-26 21:33:30
【问题描述】:

我正在尝试实现最简单的 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 的用途做出任何假设。

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

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

【问题讨论】:

    标签: java search text lucene


    【解决方案1】:

    根据您的索引位置(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 足以满足您的需求。

    输入参数可能会询问是否应该创建一个新的作家?

    【讨论】:

    • 是的,看看引用的文章,第 2 页。很明显这是它们的构造: IndexWriter indexWriter = new IndexWriter("index", new StandardAnalyzer(), true); true 用于表示“创建新索引”,并被吸收到最近的语法 amas 讨论中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多