You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/01/16 19:58:25 UTC
svn commit: r1558887 [2/2] - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/java/org/apache/lucene/util/
lucene/core/src/test/org/apache/lucene/search/ lucene/expressions/ lucen...
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/TrieField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/TrieField.java?rev=1558887&r1=1558886&r2=1558887&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/TrieField.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/TrieField.java Thu Jan 16 18:58:24 2014
@@ -142,7 +142,9 @@ public class TrieField extends Primitive
Object missingValue = null;
boolean sortMissingLast = field.sortMissingLast();
boolean sortMissingFirst = field.sortMissingFirst();
-
+
+ SortField sf;
+
switch (type) {
case INTEGER:
if( sortMissingLast ) {
@@ -151,7 +153,9 @@ public class TrieField extends Primitive
else if( sortMissingFirst ) {
missingValue = top ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
- return new SortField( field.getName(), FieldCache.NUMERIC_UTILS_INT_PARSER, top).setMissingValue(missingValue);
+ sf = new SortField( field.getName(), FieldCache.NUMERIC_UTILS_INT_PARSER, top);
+ sf.setMissingValue(missingValue);
+ return sf;
case FLOAT:
if( sortMissingLast ) {
@@ -160,7 +164,9 @@ public class TrieField extends Primitive
else if( sortMissingFirst ) {
missingValue = top ? Float.POSITIVE_INFINITY : Float.NEGATIVE_INFINITY;
}
- return new SortField( field.getName(), FieldCache.NUMERIC_UTILS_FLOAT_PARSER, top).setMissingValue(missingValue);
+ sf = new SortField( field.getName(), FieldCache.NUMERIC_UTILS_FLOAT_PARSER, top);
+ sf.setMissingValue(missingValue);
+ return sf;
case DATE: // fallthrough
case LONG:
@@ -170,7 +176,9 @@ public class TrieField extends Primitive
else if( sortMissingFirst ) {
missingValue = top ? Long.MAX_VALUE : Long.MIN_VALUE;
}
- return new SortField( field.getName(), FieldCache.NUMERIC_UTILS_LONG_PARSER, top).setMissingValue(missingValue);
+ sf = new SortField( field.getName(), FieldCache.NUMERIC_UTILS_LONG_PARSER, top);
+ sf.setMissingValue(missingValue);
+ return sf;
case DOUBLE:
if( sortMissingLast ) {
@@ -179,7 +187,9 @@ public class TrieField extends Primitive
else if( sortMissingFirst ) {
missingValue = top ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY;
}
- return new SortField( field.getName(), FieldCache.NUMERIC_UTILS_DOUBLE_PARSER, top).setMissingValue(missingValue);
+ sf = new SortField( field.getName(), FieldCache.NUMERIC_UTILS_DOUBLE_PARSER, top);
+ sf.setMissingValue(missingValue);
+ return sf;
default:
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie field: " + field.name);
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/Sorting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/Sorting.java?rev=1558887&r1=1558886&r2=1558887&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/Sorting.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/Sorting.java Thu Jan 16 18:58:24 2014
@@ -40,18 +40,25 @@ public class Sorting {
* @return SortField
*/
public static SortField getStringSortField(String fieldName, boolean reverse, boolean nullLast, boolean nullFirst) {
- if (nullLast) {
- if (!reverse) return new SortField(fieldName, nullStringLastComparatorSource);
- else return new SortField(fieldName, SortField.Type.STRING, true);
- } else if (nullFirst) {
- if (reverse) return new SortField(fieldName, nullStringLastComparatorSource, true);
- else return new SortField(fieldName, SortField.Type.STRING, false);
- } else {
- return new SortField(fieldName, SortField.Type.STRING, reverse);
+ if (nullFirst && nullLast) {
+ throw new IllegalArgumentException("Cannot specify missing values as both first and last");
}
- }
+ SortField sortField = new SortField(fieldName, SortField.Type.STRING, reverse);
+
+ // 4 cases:
+ // missingFirst / forward: default lucene behavior
+ // missingFirst / reverse: set sortMissingLast
+ // missingLast / forward: set sortMissingLast
+ // missingLast / reverse: default lucene behavior
+
+ if (nullFirst && reverse) {
+ sortField.setMissingValue(SortField.STRING_LAST);
+ } else if (nullLast && !reverse) {
+ sortField.setMissingValue(SortField.STRING_LAST);
+ }
- static final FieldComparatorSource nullStringLastComparatorSource = new MissingStringLastComparatorSource(null);
+ return sortField;
+ }
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java?rev=1558887&r1=1558886&r2=1558887&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java Thu Jan 16 18:58:24 2014
@@ -92,6 +92,15 @@ public class SearchGroupsResultTransform
SearchGroup<BytesRef> searchGroup = new SearchGroup<BytesRef>();
searchGroup.groupValue = rawSearchGroup.getKey() != null ? new BytesRef(rawSearchGroup.getKey()) : null;
searchGroup.sortValues = rawSearchGroup.getValue().toArray(new Comparable[rawSearchGroup.getValue().size()]);
+ for (int i = 0; i < searchGroup.sortValues.length; i++) {
+ SchemaField field = groupSort.getSort()[i].getField() != null ? searcher.getSchema().getFieldOrNull(groupSort.getSort()[i].getField()) : null;
+ if (field != null) {
+ FieldType fieldType = field.getType();
+ if (searchGroup.sortValues[i] != null) {
+ searchGroup.sortValues[i] = fieldType.unmarshalSortValue(searchGroup.sortValues[i]);
+ }
+ }
+ }
searchGroups.add(searchGroup);
}
}
@@ -103,22 +112,17 @@ public class SearchGroupsResultTransform
}
private NamedList serializeSearchGroup(Collection<SearchGroup<BytesRef>> data, Sort groupSort) {
- NamedList<Comparable[]> result = new NamedList<Comparable[]>();
- CharsRef spare = new CharsRef();
+ NamedList<Object[]> result = new NamedList<Object[]>();
for (SearchGroup<BytesRef> searchGroup : data) {
- Comparable[] convertedSortValues = new Comparable[searchGroup.sortValues.length];
+ Object[] convertedSortValues = new Object[searchGroup.sortValues.length];
for (int i = 0; i < searchGroup.sortValues.length; i++) {
- Comparable sortValue = (Comparable) searchGroup.sortValues[i];
+ Object sortValue = searchGroup.sortValues[i];
SchemaField field = groupSort.getSort()[i].getField() != null ? searcher.getSchema().getFieldOrNull(groupSort.getSort()[i].getField()) : null;
if (field != null) {
FieldType fieldType = field.getType();
- if (sortValue instanceof BytesRef) {
- UnicodeUtil.UTF8toUTF16((BytesRef)sortValue, spare);
- String indexedValue = spare.toString();
- sortValue = (Comparable) fieldType.toObject(field.createField(fieldType.indexedToReadable(indexedValue), 1.0f));
- } else if (sortValue instanceof String) {
- sortValue = (Comparable) fieldType.toObject(field.createField(fieldType.indexedToReadable((String) sortValue), 1.0f));
+ if (sortValue != null) {
+ sortValue = fieldType.marshalSortValue(sortValue);
}
}
convertedSortValues[i] = sortValue;
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/TopGroupsResultTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/TopGroupsResultTransformer.java?rev=1558887&r1=1558886&r2=1558887&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/TopGroupsResultTransformer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/TopGroupsResultTransformer.java Thu Jan 16 18:58:24 2014
@@ -93,6 +93,8 @@ public class TopGroupsResultTransformer
public Map<String, ?> transformToNative(NamedList<NamedList> shardResponse, Sort groupSort, Sort sortWithinGroup, String shard) {
Map<String, Object> result = new HashMap<String, Object>();
+ final IndexSchema schema = rb.req.getSearcher().getSchema();
+
for (Map.Entry<String, NamedList> entry : shardResponse) {
String key = entry.getKey();
NamedList commandResult = entry.getValue();
@@ -124,6 +126,15 @@ public class TopGroupsResultTransformer
Object sortValuesVal = document.get("sortValues");
if (sortValuesVal != null) {
sortValues = ((List) sortValuesVal).toArray();
+ for (int k = 0; k < sortValues.length; k++) {
+ SchemaField field = groupSort.getSort()[k].getField() != null ? schema.getFieldOrNull(groupSort.getSort()[k].getField()) : null;
+ if (field != null) {
+ FieldType fieldType = field.getType();
+ if (sortValues[k] != null) {
+ sortValues[k] = fieldType.unmarshalSortValue(sortValues[k]);
+ }
+ }
+ }
}
else {
log.warn("doc {} has null 'sortValues'", document);
@@ -158,6 +169,15 @@ public class TopGroupsResultTransformer
score = Float.NaN;
}
Object[] sortValues = ((List) document.get("sortValues")).toArray();
+ for (int k = 0; k < sortValues.length; k++) {
+ SchemaField field = sortWithinGroup.getSort()[k].getField() != null ? schema.getFieldOrNull(sortWithinGroup.getSort()[k].getField()) : null;
+ if (field != null) {
+ FieldType fieldType = field.getType();
+ if (sortValues[k] != null) {
+ sortValues[k] = fieldType.unmarshalSortValue(sortValues[k]);
+ }
+ }
+ }
scoreDocs[j++] = new ShardDoc(score, sortValues, uniqueId, shard);
}
@@ -217,12 +237,8 @@ public class TopGroupsResultTransformer
SchemaField field = sortWithinGroup.getSort()[j].getField() != null ? schema.getFieldOrNull(sortWithinGroup.getSort()[j].getField()) : null;
if (field != null) {
FieldType fieldType = field.getType();
- if (sortValue instanceof BytesRef) {
- UnicodeUtil.UTF8toUTF16((BytesRef)sortValue, spare);
- String indexedValue = spare.toString();
- sortValue = fieldType.toObject(field.createField(fieldType.indexedToReadable(indexedValue), 1.0f));
- } else if (sortValue instanceof String) {
- sortValue = fieldType.toObject(field.createField(fieldType.indexedToReadable((String) sortValue), 1.0f));
+ if (sortValue != null) {
+ sortValue = fieldType.marshalSortValue(sortValue);
}
}
convertedSortValues[j] = sortValue;
@@ -272,12 +288,8 @@ public class TopGroupsResultTransformer
? schema.getFieldOrNull(groupSort.getSort()[j].getField()) : null;
if (field != null) {
FieldType fieldType = field.getType();
- if (sortValue instanceof BytesRef) {
- UnicodeUtil.UTF8toUTF16((BytesRef)sortValue, spare);
- String indexedValue = spare.toString();
- sortValue = fieldType.toObject(field.createField(fieldType.indexedToReadable(indexedValue), 1.0f));
- } else if (sortValue instanceof String) {
- sortValue = fieldType.toObject(field.createField(fieldType.indexedToReadable((String) sortValue), 1.0f));
+ if (sortValue != null) {
+ sortValue = fieldType.marshalSortValue(sortValue);
}
}
convertedSortValues[j] = sortValue;