Details
-
Wish
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
-
New
Description
When reviewing sorting by DocValues I found the following naming inconsistency, which shoulc be fixed.
- DocValues are always Longs or Doubles, but it uses SortField.INT and SortField.FLOAT
- If you enable docValues in SortField but not use not SortField.INT / SortField.FLOAT, it will use FieldCache without informing the user e.g. by Exception
I would wish to fix this in any of the following ways:
- as a comment TODO notes, create new types for docvalues and remove UseDocValues setter: SortField.INT_DOCVALUES, Sort.FLOAT_DOCVALUES (using the naming INT/FLOAT from the general DOCVALUES API). Ideally there should be also Sort.BYTESREF_DOCVALUES ? This would be more consistent, as getCompataor would be only a big switch as it was before.
- use more "correct" SortField.LONG and SortField.DOUBLE and throw Exception if doc values is enabled, but a totally different SortField type is used. The Exception can be thrown in SortField.getComparator(). A second problem with SortField.INT instead of LONG is that when you request sort values to be filled into FieldDocs, the type there is suddenly Long, that may be totally confusing.
- make SortField.LONG==SortField.INT(maybe also ==BYTE==SHORT) use also docvalues if enabled by using the same comparator. If DocValues incompatible type is used, throw Ex in getComparator()
I would prefer solution #1, especially as I dont like SortField to be modifiable (useDocValues setter...). Solution #2 is also fine.
Attachments
Issue Links
- is duplicated by
-
LUCENE-3862 DocValues getInt() returns long, getFloat() returns double
- Open
- is related to
-
LUCENE-3694 DocValuesField should not overload setInt/setFloat etc
- Closed
-
LUCENE-3219 Change SortField types to an Enum
- Reopened
- relates to
-
LUCENE-4033 Sort api problems
- Closed