OK, I agree, using the builder approach looks compelling!

Though what about required settings?  EG IW's builder must have
Directory, Analyzer.  Would we pass these as up-front args to the
initial builder?

And shouldn't we still specify the version up-front so we can improve
defaults over time without breaking back-compat?  (Else, how can
we change defaults?)

EG:

  IndexWriter.builder(Version.29, dir, analyzer)
    .setRAMBufferSizeMB(128)
    .setUseCompoundFile(false)
    ...
    .create()

?

Mike

On Fri, Oct 2, 2009 at 7:45 PM, Earwin Burrfoot <ear...@gmail.com> wrote:
> On Sat, Oct 3, 2009 at 03:29, Uwe Schindler <u...@thetaphi.de> wrote:
>>> It is also probably a good idea to move various settings methods from
>>> IW to that builder and have IW immutable in regards to configuration.
>>> I'm speaking of the likes of setWriteLockTimeout, setRAMBufferSizeMB,
>>> setMergePolicy, setMergeScheduler, setSimilarity.
>>>
>>> IndexWriter.Builder iwb = IndexWriter.builder().
>>>   writeLockTimeout(0).
>>>   RAMBufferSize(config.indexationBufferMB).
>>>   maxBufferedDocs(...).
>>>   similarity(...).
>>>   analyzer(...);
>>>
>>> ... = iwb.build(dir1);
>>> ... = iwb.build(dir2);
>>
>> A happy user of google-collections API :-) These builders are really cool!
>
> I feel myself caught in the act.
>
> There is still a couple of things bothering me.
> 1. Introducing a builder, we'll have a whole heap of deprecated
> constructors that will hang there for eternity. And then users will
> scream in frustration - This class has 14(!) constructors and all of
> them are deprecated! How on earth am I supposed to create this thing?
> 2. If someone creates IW with some reflectish javabeanish tools - he's
> busted. Not that I'm feeling compassionate for such a person.
>
>> I like Earwin's version more. A builder is very flexible, because you can
>> concat all your properties (like StringBuilder works with its append method
>> returning itself) and create the instance at the end.
> Besides (arguably) cleaner syntax, the lack of which is (arguably) a
> curse of many Java libraries,
> it also allows us to return a different concrete implementation of IW
> without breaking back-compat,
> and also to choose this concrete implementation based on settings
> provided. If we feel like doing it at some point.
>
> --
> Kirill Zakharenko/Кирилл Захаренко (ear...@gmail.com)
> Home / Mobile: +7 (495) 683-567-4 / +7 (903) 5-888-423
> ICQ: 104465785
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-dev-h...@lucene.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to