0

曾经有三个构造函数,例如

IndexWriter(String, Analyzer, boolean)
IndexWriter(String, Analyzer, boolean)
IndexWriter(Directory,Analyzer, boolean)

但是现在只有一个构造函数,带来了一些不便,那么为什么要删除另外两个构造函数呢?

这种删除两个构造函数的糟糕api设计?

4

2 回答 2

2

简短的回答:随着时间的推移,IndexWriter 构造函数策略的整体变化主要是为了减少构造函数选项的扩散,并更好地封装正在使用的选项,以便它们可以共享和重用。

更长的答案:您所指的三个 arg 构造函数(目录/字符串/文件、分析器、布尔值)在 2008 年 10 月 11 日发布的 Lucene 2.4 中已弃用,然后在 Lucene 3.0(2009 年 11 月 26 日)中删除

底线:有整整一年的通知,这些构造函数最终会消失,并且它们在大约 3 年前发布的版本中被删除。

如果您有兴趣升级到非古代版本的 Lucene,并且您最大的抱怨是您的三个 arg IndexWriter 构造函数不再存在,那么只需将您的代码更改为如下所示...

IndexWriter w = new IndexWriter(dir, analyzer, true);

......所以它看起来像这样......

IndexWriterConfig c = new IndexWriterConfig(Version.LUCENE_36,analyzer).setOpenMode(CREATE_OR_APPEND)
IndexWriter w = new IndexWriter(dir, config);

...但我建议您不要只是盲目地进行更改,而是实际上查看 IndexWriterConfig 的文档并考虑一些现在可用的各种选项。

于 2012-09-18T23:28:03.420 回答
0

实际上,在 Lucene 3.0.3 中,IndexWriter 有5 个构造函数(不是 3 个),这是 IndexWriterConfig 出来之前的最后一个 GA 版本。这是有关更改的原始票证(即 IndexWriterConfig 和删除其他构造函数的弃用)。票据顶部附近的讨论链接不再有效,但Nabble 有它的副本

“这种糟糕的api设计是要删除两个构造函数吗?” 这是一个开放式问题,SO FAQ 说不应该在 SO 上问。无论如何,如果您想了解 Lucene 开发人员做出特定决定的意图,没有比直接询问 Lucene 开发人员更好的方法了,即在官方 Lucene 邮件列表上,或者在Lucene问题跟踪系统

如果我推测,这里有一些可能性:

  • 他们可能忽略了这个问题或低估了(相对于像你这样的用户,因为重要性是主观的)保留构造函数的重要性。
  • 保留构造函数会产生维护开销。除了让事情变得不那么“干净”(这又是主观的),开发人员还需要维护 IndexWriter(例如删除策略)和 IndexWriterConfig 中的默认设置。
  • 维护构造函数以使用户不必更改其代码对于 3.0/4.0 转换的用处有限。因为 4.0 中有如此多的变化,人们不能指望仅仅放弃 Lucene Core 4.0 代码并期望他们的应用程序仍然可以工作。

如果你问我,那么不,我不认为这是“糟糕的 API 设计”。期望他们永远保持每个方法调用完好无损是不合理的。他们确实有一个向后兼容性政策,我理解其中的一部分,因为他们可以弃用任何想要的东西,但他们不会删除或破坏东西,直到下一个主要版本。最糟糕的之一?我认为它比其他一些流行的项目要好得多,这些项目在点发布之间没有可比的政策和/或改变行为(即使没有修复错误)。

于 2012-10-22T19:44:48.530 回答