Lucene 3.6 IndexWriter

时间:2012-07-11 15:04:47

标签: java lucene

目前我正在使用Lucene 3.6并且难以让IndexWriters工作。

API文件表明:

IndexWriter writer = new IndexWriter(Directory, Analyzer);

(和其他一些类似的构造函数)是折旧的,我应该使用类似的东西:

IndexWriter writer = new IndexWriter(Directory, Configuration);

然而eclipse不会识别这个更新的构造函数(lucene-core3.6.jar被添加到我的项目的构建路径中)并且如果我使用旧的构造函数我必须抑制警告(我不特别想做 - 当我使用这些旧方法在内存中编入索引时会抛出异常。)

我已经清理了项目,但问题仍然存在。

编辑:我正在使用的代码:

        Directory index = new RAMDirectory();
    StandardAnalyzer analyzer = new StandardAnalyzer();
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer);
    IndexDeletionPolicy IndexDeletionPolicy = new KeepOnlyLastCommitDeletionPolicy();
    MaxFieldLength fieldLength = new MaxFieldLength(256);
    IndexWriter writer = new IndexWriter(index, analyzer, false, IndexDeletionPolicy, fieldLength);
    //IndexWriter writer = new IndexWriter(index, config); 
    writer.setUseCompoundFile(false);

3 个答案:

答案 0 :(得分:1)

一个好的开始总是在javadoc上阅读:

http://lucene.apache.org/core/3_6_0/api/all/index.html

构造函数

构造函数和描述

  • IndexWriter(Directory d,Analyzer a,boolean create,IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl)已弃用。使用IndexWriter(Directory,IndexWriterConfig)代替

  • IndexWriter(目录d,分析器a,布尔创建, IndexWriter.MaxFieldLength mfl)已弃用。使用 而不是IndexWriter(Directory,IndexWriterConfig)

  • IndexWriter(目录d,Analyzer a,IndexDeletionPolicy deletionPolicy,IndexWriter.MaxFieldLength mfl)已弃用。使用 而不是IndexWriter(Directory,IndexWriterConfig)

  • IndexWriter(目录d,Analyzer a,IndexDeletionPolicy deletionPolicy,IndexWriter.MaxFieldLength mfl,IndexCommit commit) 已过时。使用IndexWriter(Directory,IndexWriterConfig)代替

  • IndexWriter(目录d,分析器a,IndexWriter.MaxFieldLength mfl) 已过时。使用IndexWriter(Directory,IndexWriterConfig)代替

  • IndexWriter(Directory d,IndexWriterConfig conf)根据conf中给出的设置构造一个新的IndexWriter。

并不令人惊讶,您使用的是不推荐使用的构造函数,Eclipse正确地发出警告。如果你使用最后一个构造函数,我相信Eclipse不会发出警告。

答案 1 :(得分:0)

您可能想要更改:

StandardAnalyzer analyzer = new StandardAnalyzer();

为:

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

StandardAnalyzer的构造函数采用Version对象。 Eclipse可能无法识别IndexWriter构造函数,因为在较早的行中存在编译时错误(即,当您尝试创建新的StandardAnalyzer时)。

答案 2 :(得分:0)

我解决了这个问题:

有一个.jar文件干扰了lucene(thirdparty-all.jar),我通过查看堆栈跟踪找到了它。删除.jar删除的问题。