Simon Willnauer <[email protected]> wrote:
> On Fri, Sep 17, 2010 at 11:45 PM, Bill Janssen <[email protected]> wrote:
> > Simon Willnauer <[email protected]> wrote:
> >
> >> On Fri, Sep 17, 2010 at 8:14 PM, Bill Janssen <[email protected]> wrote:
> >> > Simon Willnauer <[email protected]> wrote:
> >> >
> >> >> Hey Bill,
> >> >> let me clarify what Version is used for since I think that caused
> >> >> little confusion.
> >> >
> >> > Thanks.
> >> >
> >> >> The Version constant was mainly introduced to help
> >> >> users with backwards compatibility and upgrading their codebase to a
> >> >> new version of lucene without breaking existing applications / indexes
> >> >> build with previous versions. For instance StandardAnalyzer preserves
> >> >> the positionIncrement in its StopFilter which was introduces in Lucene
> >> >> 2.9. If you use 2.4 and upgrade to 2.9 this change might break you app
> >> >> since you indexed with a 2.4 behavior. You phrasequeries might not
> >> >> work as expected anymore. If you don't have any upgrade issues or if
> >> >> you can simply reindex you might just use the latest version.
> >> >
> >> > That's what I'm trying to do. But how? LUCENE_CURRENT is deprecated!
> >> >
> >> > How about adding a constructor for StandardAnalyzer that takes no
> >> > parameters and is implicitly LUCENE_CURRENT?
> >>
> >> We deprecated LUCENE_CURRENT for a good reason that is that folks will
> >> run into big trouble if they upgrade from X to X+n because behavior
> >> may change dramatically due to optimizations, bug fixes and useful
> >> features. If you blindly pass LUCENE_CURRENT you might end up with
> >> incompatible APIs in some cases (we do deploy "sophisticated backwards
> >> layers" like we did in CharTokenizer) or query analysis which will not
> >> work with you existing Version X index.
> >
> > Yes, but that's not an issue if I don't *have* existing version X
> > indices, which I don't.
> Well then why don't you just use the Version.LUCENE_30 and assign it
> to some static final variable like:
> class MyConstants { public final Version LUCENE_VERSION =
> Version.LUCENE_30; } and use it everywhere?!
Because that will break if what my users have installed is Lucene 2.9.3.
> We moved away from LUCENE_CURRENT for the reasons I mentioned - if
> that made you aware of what could happen our plans worked out.
I was already aware, but I do appreciate you folks thinking of your
users. I just wish those plans had been thought out a bit more. But
that's software development, isn't it :-?
> Version of the code? I don't understand.. the max value of Version is
> your lucene version, does that help?!
Yep. That's what I'm using:
# we'd like to make this the latest Version that this Lucene knows
# about, because that's what the index will be using, but using
# Version.LUCENE_CURRENT is deprecated, and there's no API to map
# from the Lucene version string to the Version value for that
# string. To make things worse, the 2.9 code doesn't support the
# values() method, and Version doesn't implement Comparable, so I
# can't just use max(). So, this complexity:
def _order(v1, v2):
if v1.equals(v2):
return 0
if v1.onOrAfter(v2):
return 1
else:
return -1
_values = sorted([getattr(Version, x) for x in Version.__dict__
if (x.startswith("LUCENE") and (x != "LUCENE_CURRENT"))],
cmp=_order)
_indexversion = _values[-1]
del _order, _values
> > Or, is there a method which will take a Lucene version, expressed as a
> > Package or perhaps even a string like "3.0.2", and return the
> > appropriate Version value? If so, I could write my own code to retrieve
> > the Lucene version, then call that method to retrieve the Version value.
>
> org.apache.lucene.util.Constants#LUCENE_MAIN_VERSION
> org.apache.lucene.util.Constants#LUCENE_VERSION
Yes, those are the strings I would use. Now, how do I map from that
string to an appropriate value of Version? I think Version should grow
a static method for doing that:
Version theVersion = Version.valueOf(Constants.LUCENE_MAIN_VERSION);
Thanks,
Bill
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]