[ https://issues.apache.org/jira/browse/LUCENE-2294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12841207#action_12841207 ]
Shai Erera commented on LUCENE-2294: ------------------------------------ I'm thinking to make this whole IWC a constructor only parameter to IW, without the ability to set it afterwards. I don't see any reason why would anyone change the RAM limit, Similarity etc while IW is running. What's the advantage vs. say close the current IW and open a new one with the different settings? I know the latter is more expensive, and I write it deliberately - I think those settings are really ctor-only settings. Otherwise you might get inconsistent documents (like changing the Similarity or max field length). This will also simplify IWC, because now I need to distinguish between settings that cannot be altered afterwards, like changing IndexDeletionPolicy, create, IndexCommit, Analyzer ... if IWC will be a ctor only object, I can have only the default ctor (to init to default settings) and provide the setters otherwise. Any objections? > Create IndexWriterConfiguration and store all of IW configuration there > ----------------------------------------------------------------------- > > Key: LUCENE-2294 > URL: https://issues.apache.org/jira/browse/LUCENE-2294 > Project: Lucene - Java > Issue Type: Improvement > Components: Index > Reporter: Shai Erera > Fix For: 3.1 > > > I would like to factor out of all IW configuration parameters into a single > configuration class, which I propose to name IndexWriterConfiguration (or > IndexWriterConfig). I want to store there almost everything besides the > Directory, and to reduce all the ctors down to one: IndexWriter(Directory, > IndexWriterConfiguration). What I was thinking of storing there are the > following parameters: > * All of ctors parameters, except for Directory. > * The different setters where it makes sense. For example I still think > infoStream should be set on IW directly. > I'm thinking that IWC should expose everything in a setter/getter methods, > and defaults to whatever IW defaults today. Except for Analyzer which will > need to be defined in the ctor of IWC and won't have a setter. > I am not sure why MaxFieldLength is required in all IW ctors, yet IW declares > a DEFAULT (which is an int and not MaxFieldLength). Do we still think that > 10000 should be the default? Why not default to UNLIMITED and otherwise let > the application decide what LIMITED means for it? I would like to make MFL > optional on IWC and default to something, and I hope that default will be > UNLIMITED. We can document that on IWC, so that if anyone chooses to move to > the new API, he should be aware of that ... > I plan to deprecate all the ctors and getters/setters and replace them by: > * One ctor as described above > * getIndexWriterConfiguration, or simply getConfig, which can then be queried > for the setting of interest. > * About the setters, I think maybe we can just introduce a setConfig method > which will override everything that is overridable today, except for > Analyzer. So someone could do iw.getConfig().setSomething(); > iw.setConfig(newConfig); > ** The setters on IWC can return an IWC to allow chaining set calls ... so > the above will turn into > iw.setConfig(iw.getConfig().setSomething1().setSomething2()); > BTW, this is needed for Parallel Indexing (see LUCENE-1879), but I think it > will greatly simplify IW's API. > I'll start to work on a patch. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org