有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么lucene 4.0删除IndexWriter类的两个构造函数?

过去有三个构造函数,例如

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

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

这种糟糕的api设计是为了删除这两个构造函数吗


共 (2) 个答案

  1. # 1 楼答案

    实际上,Lucene 3.0.3中有5 constructors (not 3) for IndexWriter,这是IndexWriterConfig出现之前的最后一个GA发行版本。下面是original ticket about the change(即IndexWriterConfig和删除其他构造函数的建议)。靠近票子顶部的讨论链接不再有效,而是Nabble has a copy of it

    “这种糟糕的api设计是为了删除这两个构造函数吗?”这是一个不限成员名额的问题。在任何情况下,如果你想知道Lucene开发人员在做出特定决策时的意图,没有比直接询问Lucene开发人员(即在official Lucene mailing lists上)或在Lucene issue-tracking system上开罚单更好的方法了

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

    • 他们可能忽略了这一点,或者低估了(相对于像您这样的用户,因为重要性是主观的)保留构造函数的重要性
    • 保留施工人员将有维护开销。除了使事情不“干净”(这也是主观的),开发人员还需要在IndexWriter(例如删除策略)和IndexWriterConfig中维护默认设置
    • 维护构造函数只是为了用户不必更改代码,这对3.0/4.0转换的用处有限。因为在4.0中有如此多的变化,人们不能期望仅仅放弃Lucene Core 4.0代码而期望他们的应用程序仍然工作

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

  2. # 2 楼答案

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

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

    一句话:有整整一年的通知说,这些建设者最终离开了,他们在3年前发布的一个版本中被移除

    如果您对升级到Lucene的非古代版本感兴趣,并且您最大的抱怨是您的three-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);
    

    。。。但我建议,不要盲目地进行更改,而是查看DexXWrror CONFIG的文档,并考虑现在可用的各种选项。p>