【问题标题】:Lucene 3.6 IndexWriterLucene 3.6 索引编写器
【发布时间】:2012-07-11 15:04:47
【问题描述】:

目前我正在使用 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);

【问题讨论】:

    标签: java lucene


    【解决方案1】:

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

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

    构造函数

    构造函数和描述

    • IndexWriter(Directory d, Analyzer a, boolean create, IndexDeletionPolicy deletePolicy, IndexWriter.MaxFieldLength mfl) 已弃用。改用 IndexWriter(Directory, IndexWriterConfig)

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

    • IndexWriter(目录 d,分析器 a,IndexDeletionPolicy deletePolicy、IndexWriter.MaxFieldLength mfl) 已弃用。利用 IndexWriter(Directory, IndexWriterConfig) 代替

    • IndexWriter(目录 d,分析器 a,IndexDeletionPolicy 删除策略,IndexWriter.MaxFieldLength mfl,IndexCommit 提交) 已弃用。改用 IndexWriter(Directory, IndexWriterConfig)

    • IndexWriter(目录 d,分析器 a,IndexWriter.MaxFieldLength mfl) 已弃用。改用 IndexWriter(Directory, IndexWriterConfig)

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

    不出所料,您正在使用已弃用的构造函数,而 Eclipse 正确地发出了警告。如果你使用最后一个构造函数,我相信 Eclipse 不会发出警告。

    【讨论】:

    • 不,我先试过了。抱歉,第一篇文章有​​误(已编辑以反映这一点)。 Eclipse 不会使用该构造函数编译源代码,因此存在问题。抱歉,一直在兜圈子。
    • 这是不可能的。它只是意味着您在类路径中没有正确的类,或者您有多个版本。编写 new IndexWriter(null,null) 时遇到哪个错误?
    • 构造函数 IndexWriter(String, Analyzer) 不明确。
    • 正如我所说,您在 Classpath 中没有正确的版本。我已经向您展示了 javadoc 的摘录,您可以阅读唯一带有两个参数的构造函数是最后一个。 Eclipse 怎么会抱怨你使用了一个不存在的构造函数???
    • 您的类路径中可能有多个版本。您能否在您正在使用的代码副本中提供一个要点(Lucene 3.6 构造函数?)
    【解决方案2】:

    你可能想要改变:

    StandardAnalyzer analyzer = new StandardAnalyzer();
    

    到:

    StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
    

    StandardAnalyzer 的构造函数接受一个 Version 对象。也许 Eclipse 无法识别 IndexWriter 构造函数,因为在前面的行(即当您尝试创建新的 StandardAnalyzer 时)存在编译时错误。

    【讨论】:

    • 致否决这个答案的人:你能至少指出这个答案有什么问题吗?该问题指出发布的代码存在编译时错误(“eclipse 无法识别这个较新的构造函数”——我假设“无法识别”=错误(不仅仅是警告))并询问为什么存在错误。我的回答指出了消除编译时错误所需的更改(我确实尝试在 Eclipse 中编译代码)。
    • 嗨,凯 - 谢谢,我已经尝试过了,它似乎并没有影响我遇到的问题,但仍然是我的代码中的另一个错误。
    【解决方案3】:

    我解决了这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      相关资源
      最近更新 更多