mirror of https://github.com/apache/lucene.git
SOLR-10400: Replace (instanceof TrieFooField || instanceof FooPointField) constructs with FieldType.getNumberType() or SchemaField.getSortField() where appropriate.
This commit is contained in:
parent
6e68e9ea8d
commit
b3eccb35ea
|
@ -164,6 +164,9 @@ Other Changes
|
|||
|
||||
* SOLR-10617: JDBCStream accepts columns of type TIME, DATE & TIMESTAMP as well as CLOBs and decimal
|
||||
numeric types (James Dyer)
|
||||
|
||||
* SOLR-10400: Replace (instanceof TrieFooField || instanceof FooPointField) constructs with
|
||||
FieldType.getNumberType() or SchemaField.getSortField() where appropriate. (hossman, Steve Rowe)
|
||||
|
||||
================== 6.6.0 ==================
|
||||
|
||||
|
|
|
@ -71,17 +71,10 @@ import org.apache.solr.common.util.SimpleOrderedMap;
|
|||
import org.apache.solr.core.PluginInfo;
|
||||
import org.apache.solr.core.SolrCore;
|
||||
import org.apache.solr.request.SolrQueryRequest;
|
||||
import org.apache.solr.schema.DoublePointField;
|
||||
import org.apache.solr.schema.FieldType;
|
||||
import org.apache.solr.schema.FloatPointField;
|
||||
import org.apache.solr.schema.IntPointField;
|
||||
import org.apache.solr.schema.LongPointField;
|
||||
import org.apache.solr.schema.NumberType;
|
||||
import org.apache.solr.schema.SchemaField;
|
||||
import org.apache.solr.schema.StrField;
|
||||
import org.apache.solr.schema.TrieDoubleField;
|
||||
import org.apache.solr.schema.TrieFloatField;
|
||||
import org.apache.solr.schema.TrieIntField;
|
||||
import org.apache.solr.schema.TrieLongField;
|
||||
import org.apache.solr.search.CollapsingQParserPlugin;
|
||||
import org.apache.solr.search.DocIterator;
|
||||
import org.apache.solr.search.DocList;
|
||||
|
@ -216,7 +209,7 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
|
|||
FieldType fieldType = schemaField.getType();
|
||||
|
||||
SortedDocValues values = null;
|
||||
long nullValue = 0;
|
||||
long nullValue = 0L;
|
||||
|
||||
if(fieldType instanceof StrField) {
|
||||
//Get The Top Level SortedDocValues
|
||||
|
@ -231,21 +224,20 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
|
|||
} else {
|
||||
//Get the nullValue for the numeric collapse field
|
||||
String defaultValue = searcher.getSchema().getField(field).getDefaultValue();
|
||||
if(defaultValue != null) {
|
||||
if(fieldType instanceof TrieIntField || fieldType instanceof TrieLongField ||
|
||||
fieldType instanceof IntPointField || fieldType instanceof LongPointField) {
|
||||
|
||||
final NumberType numType = fieldType.getNumberType();
|
||||
|
||||
// Since the expand component depends on the operation of the collapse component,
|
||||
// which validates that numeric field types are 32-bit,
|
||||
// we don't need to handle invalid 64-bit field types here.
|
||||
if (defaultValue != null) {
|
||||
if (numType == NumberType.INTEGER) {
|
||||
nullValue = Long.parseLong(defaultValue);
|
||||
} else if(fieldType instanceof TrieFloatField || fieldType instanceof FloatPointField){
|
||||
} else if (numType == NumberType.FLOAT) {
|
||||
nullValue = Float.floatToIntBits(Float.parseFloat(defaultValue));
|
||||
} else if(fieldType instanceof TrieDoubleField || fieldType instanceof DoublePointField){
|
||||
nullValue = Double.doubleToLongBits(Double.parseDouble(defaultValue));
|
||||
}
|
||||
} else {
|
||||
if(fieldType instanceof TrieFloatField || fieldType instanceof FloatPointField){
|
||||
nullValue = Float.floatToIntBits(0.0f);
|
||||
} else if(fieldType instanceof TrieDoubleField || fieldType instanceof DoublePointField){
|
||||
nullValue = Double.doubleToLongBits(0.0f);
|
||||
}
|
||||
} else if (NumberType.FLOAT.equals(numType)) { // Integer case already handled by nullValue defaulting to 0
|
||||
nullValue = Float.floatToIntBits(0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,13 +69,8 @@ import org.apache.solr.request.LocalSolrQueryRequest;
|
|||
import org.apache.solr.request.SolrQueryRequest;
|
||||
import org.apache.solr.request.SolrRequestInfo;
|
||||
import org.apache.solr.schema.FieldType;
|
||||
import org.apache.solr.schema.FloatPointField;
|
||||
import org.apache.solr.schema.IntPointField;
|
||||
import org.apache.solr.schema.LongPointField;
|
||||
import org.apache.solr.schema.StrField;
|
||||
import org.apache.solr.schema.TrieFloatField;
|
||||
import org.apache.solr.schema.TrieIntField;
|
||||
import org.apache.solr.schema.TrieLongField;
|
||||
import org.apache.solr.schema.NumberType;
|
||||
import org.apache.solr.uninverting.UninvertingReader;
|
||||
|
||||
import static org.apache.solr.common.params.CommonParams.SORT;
|
||||
|
@ -966,14 +961,26 @@ public class CollapsingQParserPlugin extends QParserPlugin {
|
|||
} else if (funcQuery != null) {
|
||||
this.collapseStrategy = new OrdValueSourceStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, funcQuery, searcher, collapseValues);
|
||||
} else {
|
||||
if (fieldType instanceof TrieIntField || fieldType instanceof IntPointField) {
|
||||
this.collapseStrategy = new OrdIntStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
} else if (fieldType instanceof TrieFloatField || fieldType instanceof FloatPointField) {
|
||||
this.collapseStrategy = new OrdFloatStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
} else if (fieldType instanceof TrieLongField || fieldType instanceof LongPointField) {
|
||||
this.collapseStrategy = new OrdLongStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
} else {
|
||||
throw new IOException("min/max must be either Int/Long/Float field types");
|
||||
NumberType numType = fieldType.getNumberType();
|
||||
if (null == numType) {
|
||||
throw new IOException("min/max must be either Int/Long/Float based field types");
|
||||
}
|
||||
switch (numType) {
|
||||
case INTEGER: {
|
||||
this.collapseStrategy = new OrdIntStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
break;
|
||||
}
|
||||
case FLOAT: {
|
||||
this.collapseStrategy = new OrdFloatStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
break;
|
||||
}
|
||||
case LONG: {
|
||||
this.collapseStrategy = new OrdLongStrategy(maxDoc, nullPolicy, new int[valueCount], groupHeadSelector, this.needsScores, boostDocs, collapseValues);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new IOException("min/max must be either Int/Long/Float field types");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1150,12 +1157,20 @@ public class CollapsingQParserPlugin extends QParserPlugin {
|
|||
} else if (funcQuery != null) {
|
||||
this.collapseStrategy = new IntValueSourceStrategy(maxDoc, size, collapseField, nullValue, nullPolicy, groupHeadSelector, this.needsScores, boostDocsMap, funcQuery, searcher);
|
||||
} else {
|
||||
if (fieldType instanceof TrieIntField || fieldType instanceof IntPointField) {
|
||||
this.collapseStrategy = new IntIntStrategy(maxDoc, size, collapseField, nullValue, nullPolicy, groupHeadSelector, this.needsScores, boostDocsMap);
|
||||
} else if (fieldType instanceof TrieFloatField || fieldType instanceof FloatPointField) {
|
||||
this.collapseStrategy = new IntFloatStrategy(maxDoc, size, collapseField, nullValue, nullPolicy, groupHeadSelector, this.needsScores, boostDocsMap);
|
||||
} else {
|
||||
throw new IOException("min/max must be Int or Float field types when collapsing on numeric fields");
|
||||
NumberType numType = fieldType.getNumberType();
|
||||
assert null != numType; // shouldn't make it here for non-numeric types
|
||||
switch (numType) {
|
||||
case INTEGER: {
|
||||
this.collapseStrategy = new IntIntStrategy(maxDoc, size, collapseField, nullValue, nullPolicy, groupHeadSelector, this.needsScores, boostDocsMap);
|
||||
break;
|
||||
}
|
||||
case FLOAT: {
|
||||
this.collapseStrategy = new IntFloatStrategy(maxDoc, size, collapseField, nullValue, nullPolicy, groupHeadSelector, this.needsScores, boostDocsMap);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new IOException("min/max must be Int or Float field types when collapsing on numeric fields");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1262,14 +1277,11 @@ public class CollapsingQParserPlugin extends QParserPlugin {
|
|||
}
|
||||
|
||||
private static class CollectorFactory {
|
||||
|
||||
/** @see #isNumericCollapsible */
|
||||
private final static EnumSet<NumberType> NUMERIC_COLLAPSIBLE_TYPES = EnumSet.of(NumberType.INTEGER,
|
||||
NumberType.FLOAT);
|
||||
private boolean isNumericCollapsible(FieldType collapseFieldType) {
|
||||
if (collapseFieldType instanceof TrieIntField || collapseFieldType instanceof IntPointField ||
|
||||
collapseFieldType instanceof TrieFloatField || collapseFieldType instanceof FloatPointField) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return NUMERIC_COLLAPSIBLE_TYPES.contains(collapseFieldType.getNumberType());
|
||||
}
|
||||
|
||||
public DelegatingCollector getCollector(String collapseField,
|
||||
|
@ -1352,14 +1364,15 @@ public class CollapsingQParserPlugin extends QParserPlugin {
|
|||
|
||||
int nullValue = 0;
|
||||
|
||||
if (collapseFieldType instanceof TrieFloatField || collapseFieldType instanceof FloatPointField) {
|
||||
// must be non-null at this point
|
||||
if (collapseFieldType.getNumberType().equals(NumberType.FLOAT)) {
|
||||
if (defaultValue != null) {
|
||||
nullValue = Float.floatToIntBits(Float.parseFloat(defaultValue));
|
||||
} else {
|
||||
nullValue = Float.floatToIntBits(0.0f);
|
||||
}
|
||||
} else {
|
||||
if (defaultValue != null) {
|
||||
if (defaultValue != null) {
|
||||
nullValue = Integer.parseInt(defaultValue);
|
||||
}
|
||||
}
|
||||
|
@ -1386,18 +1399,19 @@ public class CollapsingQParserPlugin extends QParserPlugin {
|
|||
funcQuery,
|
||||
searcher);
|
||||
|
||||
} else if(isNumericCollapsible(collapseFieldType)) {
|
||||
} else if (isNumericCollapsible(collapseFieldType)) {
|
||||
|
||||
int nullValue = 0;
|
||||
|
||||
if (collapseFieldType instanceof TrieFloatField || collapseFieldType instanceof FloatPointField) {
|
||||
if(defaultValue != null) {
|
||||
// must be non-null at this point
|
||||
if (collapseFieldType.getNumberType().equals(NumberType.FLOAT)) {
|
||||
if (defaultValue != null) {
|
||||
nullValue = Float.floatToIntBits(Float.parseFloat(defaultValue));
|
||||
} else {
|
||||
nullValue = Float.floatToIntBits(0.0f);
|
||||
}
|
||||
} else {
|
||||
if(defaultValue != null) {
|
||||
if (defaultValue != null) {
|
||||
nullValue = Integer.parseInt(defaultValue);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,15 +28,6 @@ import org.apache.lucene.search.SortField;
|
|||
import org.apache.lucene.search.spell.Dictionary;
|
||||
import org.apache.lucene.search.suggest.DocumentValueSourceDictionary;
|
||||
import org.apache.solr.core.SolrCore;
|
||||
import org.apache.solr.schema.DoublePointField;
|
||||
import org.apache.solr.schema.FieldType;
|
||||
import org.apache.solr.schema.FloatPointField;
|
||||
import org.apache.solr.schema.IntPointField;
|
||||
import org.apache.solr.schema.LongPointField;
|
||||
import org.apache.solr.schema.TrieDoubleField;
|
||||
import org.apache.solr.schema.TrieFloatField;
|
||||
import org.apache.solr.schema.TrieIntField;
|
||||
import org.apache.solr.schema.TrieLongField;
|
||||
import org.apache.solr.search.SolrIndexSearcher;
|
||||
|
||||
/**
|
||||
|
@ -81,15 +72,7 @@ public class DocumentExpressionDictionaryFactory extends DictionaryFactory {
|
|||
if (params.getName(i).equals(SORT_FIELD)) {
|
||||
String sortFieldName = (String) params.getVal(i);
|
||||
|
||||
SortField.Type sortFieldType = getSortFieldType(core, sortFieldName);
|
||||
|
||||
if (sortFieldType == null) {
|
||||
throw new IllegalArgumentException(sortFieldName + " could not be mapped to any appropriate type"
|
||||
+ " [long, int, float, double]");
|
||||
}
|
||||
|
||||
SortField sortField = new SortField(sortFieldName, sortFieldType);
|
||||
sortFields.add(sortField);
|
||||
sortFields.add(getSortField(core, sortFieldName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -111,20 +94,8 @@ public class DocumentExpressionDictionaryFactory extends DictionaryFactory {
|
|||
return expression.getDoubleValuesSource(bindings).toLongValuesSource();
|
||||
}
|
||||
|
||||
private SortField.Type getSortFieldType(SolrCore core, String sortFieldName) {
|
||||
SortField.Type type = null;
|
||||
String fieldTypeName = core.getLatestSchema().getField(sortFieldName).getType().getTypeName();
|
||||
FieldType ft = core.getLatestSchema().getFieldTypes().get(fieldTypeName);
|
||||
if (ft instanceof TrieFloatField || ft instanceof FloatPointField) {
|
||||
type = SortField.Type.FLOAT;
|
||||
} else if (ft instanceof TrieIntField || ft instanceof IntPointField) {
|
||||
type = SortField.Type.INT;
|
||||
} else if (ft instanceof TrieLongField || ft instanceof LongPointField) {
|
||||
type = SortField.Type.LONG;
|
||||
} else if (ft instanceof TrieDoubleField || ft instanceof DoublePointField) {
|
||||
type = SortField.Type.DOUBLE;
|
||||
}
|
||||
return type;
|
||||
private SortField getSortField(SolrCore core, String sortFieldName) {
|
||||
return core.getLatestSchema().getField(sortFieldName).getSortField(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -50,18 +50,18 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
|
||||
del("*:*");
|
||||
|
||||
index_specific(0,"id","1", "term_s", "YYYY", group, "group1", "test_ti", "5", "test_tl", "10", "test_tf", "2000");
|
||||
index_specific(0,"id","2", "term_s", "YYYY", group, "group1", "test_ti", "50", "test_tl", "100", "test_tf", "200");
|
||||
index_specific(1,"id","5", "term_s", "YYYY", group, "group2", "test_ti", "4", "test_tl", "10", "test_tf", "2000");
|
||||
index_specific(1,"id","6", "term_s", "YYYY", group, "group2", "test_ti", "10", "test_tl", "100", "test_tf", "200");
|
||||
index_specific(0,"id","7", "term_s", "YYYY", group, "group1", "test_ti", "1", "test_tl", "100000", "test_tf", "2000");
|
||||
index_specific(1,"id","8", "term_s", "YYYY", group, "group2", "test_ti", "2", "test_tl", "100000", "test_tf", "200");
|
||||
index_specific(2,"id","9", "term_s", "YYYY", group, "group3", "test_ti", "1000", "test_tl", "1005", "test_tf", "3000");
|
||||
index_specific(2, "id", "10", "term_s", "YYYY", group, "group3", "test_ti", "1500", "test_tl", "1001", "test_tf", "3200");
|
||||
index_specific(2,"id", "11", "term_s", "YYYY", group, "group3", "test_ti", "1300", "test_tl", "1002", "test_tf", "3300");
|
||||
index_specific(1,"id","12", "term_s", "YYYY", group, "group4", "test_ti", "15", "test_tl", "10", "test_tf", "2000");
|
||||
index_specific(1,"id","13", "term_s", "YYYY", group, "group4", "test_ti", "16", "test_tl", "9", "test_tf", "2000");
|
||||
index_specific(1,"id","14", "term_s", "YYYY", group, "group4", "test_ti", "1", "test_tl", "20", "test_tf", "2000");
|
||||
index_specific(0,"id","1", "term_s", "YYYY", group, "group1", "test_i", "5", "test_l", "10", "test_f", "2000");
|
||||
index_specific(0,"id","2", "term_s", "YYYY", group, "group1", "test_i", "50", "test_l", "100", "test_f", "200");
|
||||
index_specific(1,"id","5", "term_s", "YYYY", group, "group2", "test_i", "4", "test_l", "10", "test_f", "2000");
|
||||
index_specific(1,"id","6", "term_s", "YYYY", group, "group2", "test_i", "10", "test_l", "100", "test_f", "200");
|
||||
index_specific(0,"id","7", "term_s", "YYYY", group, "group1", "test_i", "1", "test_l", "100000", "test_f", "2000");
|
||||
index_specific(1,"id","8", "term_s", "YYYY", group, "group2", "test_i", "2", "test_l", "100000", "test_f", "200");
|
||||
index_specific(2,"id","9", "term_s", "YYYY", group, "group3", "test_i", "1000", "test_l", "1005", "test_f", "3000");
|
||||
index_specific(2, "id", "10", "term_s", "YYYY", group, "group3", "test_i", "1500", "test_l", "1001", "test_f", "3200");
|
||||
index_specific(2,"id", "11", "term_s", "YYYY", group, "group3", "test_i", "1300", "test_l", "1002", "test_f", "3300");
|
||||
index_specific(1,"id","12", "term_s", "YYYY", group, "group4", "test_i", "15", "test_l", "10", "test_f", "2000");
|
||||
index_specific(1,"id","13", "term_s", "YYYY", group, "group4", "test_i", "16", "test_l", "9", "test_f", "2000");
|
||||
index_specific(1,"id","14", "term_s", "YYYY", group, "group4", "test_i", "1", "test_l", "20", "test_f", "2000");
|
||||
|
||||
|
||||
commit();
|
||||
|
@ -79,15 +79,15 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
handle.put("_version_", SKIP);
|
||||
handle.put("expanded", UNORDERED);
|
||||
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "fl","*,score");
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "expand.sort", "test_tl desc", "fl","*,score");
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "expand.sort", "test_tl desc", "expand.rows", "1", "fl","*,score");
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "fl","*,score");
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "expand.sort", "test_l desc", "fl","*,score");
|
||||
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "expand.sort", "test_l desc", "expand.rows", "1", "fl","*,score");
|
||||
//Test no expand results
|
||||
query("q", "test_ti:5", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "expand.sort", "test_tl desc", "expand.rows", "1", "fl","*,score");
|
||||
query("q", "test_i:5", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "expand.sort", "test_l desc", "expand.rows", "1", "fl","*,score");
|
||||
//Test zero results
|
||||
query("q", "test_ti:5434343", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "expand.sort", "test_tl desc", "expand.rows", "1", "fl","*,score");
|
||||
query("q", "test_i:5434343", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "expand.sort", "test_l desc", "expand.rows", "1", "fl","*,score");
|
||||
//Test page 2
|
||||
query("q", "*:*", "start","1", "rows", "1", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "fl","*,score");
|
||||
query("q", "*:*", "start","1", "rows", "1", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_i)", "expand", "true", "fl","*,score");
|
||||
|
||||
|
||||
//First basic test case.
|
||||
|
@ -95,7 +95,7 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
|
||||
setDistributedParams(params);
|
||||
|
@ -114,9 +114,9 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
setDistributedParams(params);
|
||||
rsp = queryServer(params);
|
||||
results = rsp.getExpandedResults();
|
||||
|
@ -133,9 +133,9 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
params.add("expand.rows", "1");
|
||||
setDistributedParams(params);
|
||||
rsp = queryServer(params);
|
||||
|
@ -153,7 +153,7 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("fl", "id");
|
||||
|
||||
|
@ -172,7 +172,7 @@ public class DistributedExpandComponentTest extends BaseDistributedSearchTestCas
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("distrib.singlePass", "true");
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
|
||||
@Test
|
||||
public void testExpand() throws Exception {
|
||||
List<String> groups = new ArrayList();
|
||||
List<String> groups = new ArrayList<>();
|
||||
groups.add("group_s");
|
||||
groups.add("group_s_dv");
|
||||
|
||||
|
@ -62,7 +62,7 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
|
||||
@Test
|
||||
public void testNumericExpand() throws Exception {
|
||||
List<String> groups = new ArrayList();
|
||||
List<String> groups = new ArrayList<>();
|
||||
groups.add("group_i");
|
||||
groups.add("group_ti_dv");
|
||||
groups.add("group_f");
|
||||
|
@ -82,30 +82,30 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
|
||||
private void _testExpand(String group, String floatAppend, String hint) throws Exception {
|
||||
|
||||
String[] doc = {"id","1", "term_s", "YYYY", group, "1"+floatAppend, "test_ti", "5", "test_tl", "10", "test_tf", "2000", "type_s", "parent"};
|
||||
String[] doc = {"id","1", "term_s", "YYYY", group, "1"+floatAppend, "test_i", "5", "test_l", "10", "test_f", "2000", "type_s", "parent"};
|
||||
assertU(adoc(doc));
|
||||
assertU(commit());
|
||||
String[] doc1 = {"id","2", "term_s","YYYY", group, "1"+floatAppend, "test_ti", "50", "test_tl", "100", "test_tf", "200", "type_s", "child"};
|
||||
String[] doc1 = {"id","2", "term_s","YYYY", group, "1"+floatAppend, "test_i", "50", "test_l", "100", "test_f", "200", "type_s", "child"};
|
||||
assertU(adoc(doc1));
|
||||
|
||||
String[] doc2 = {"id","3", "term_s", "YYYY", "test_ti", "5000", "test_tl", "100", "test_tf", "200"};
|
||||
String[] doc2 = {"id","3", "term_s", "YYYY", "test_i", "5000", "test_l", "100", "test_f", "200"};
|
||||
assertU(adoc(doc2));
|
||||
assertU(commit());
|
||||
String[] doc3 = {"id","4", "term_s", "YYYY", "test_ti", "500", "test_tl", "1000", "test_tf", "2000"};
|
||||
String[] doc3 = {"id","4", "term_s", "YYYY", "test_i", "500", "test_l", "1000", "test_f", "2000"};
|
||||
assertU(adoc(doc3));
|
||||
|
||||
|
||||
String[] doc4 = {"id","5", "term_s", "YYYY", group, "2"+floatAppend, "test_ti", "4", "test_tl", "10", "test_tf", "2000", "type_s", "parent"};
|
||||
String[] doc4 = {"id","5", "term_s", "YYYY", group, "2"+floatAppend, "test_i", "4", "test_l", "10", "test_f", "2000", "type_s", "parent"};
|
||||
assertU(adoc(doc4));
|
||||
assertU(commit());
|
||||
String[] doc5 = {"id","6", "term_s","YYYY", group, "2"+floatAppend, "test_ti", "10", "test_tl", "100", "test_tf", "200", "type_s", "child"};
|
||||
String[] doc5 = {"id","6", "term_s","YYYY", group, "2"+floatAppend, "test_i", "10", "test_l", "100", "test_f", "200", "type_s", "child"};
|
||||
assertU(adoc(doc5));
|
||||
assertU(commit());
|
||||
|
||||
String[] doc6 = {"id","7", "term_s", "YYYY", group, "1"+floatAppend, "test_ti", "1", "test_tl", "100000", "test_tf", "2000", "type_s", "child"};
|
||||
String[] doc6 = {"id","7", "term_s", "YYYY", group, "1"+floatAppend, "test_i", "1", "test_l", "100000", "test_f", "2000", "type_s", "child"};
|
||||
assertU(adoc(doc6));
|
||||
assertU(commit());
|
||||
String[] doc7 = {"id","8", "term_s","YYYY", group, "2"+floatAppend, "test_ti", "2", "test_tl", "100000", "test_tf", "200", "type_s", "child"};
|
||||
String[] doc7 = {"id","8", "term_s","YYYY", group, "2"+floatAppend, "test_i", "2", "test_l", "100000", "test_f", "200", "type_s", "child"};
|
||||
assertU(adoc(doc7));
|
||||
|
||||
assertU(commit());
|
||||
|
@ -115,7 +115,7 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
|
@ -133,7 +133,7 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("rows", "1");
|
||||
params.add("start", "1");
|
||||
|
@ -149,9 +149,9 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc, sub(1,1) asc");//the "sub()" just testing function queries
|
||||
params.add("expand.sort", "test_l desc, sub(1,1) asc");//the "sub()" just testing function queries
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
"/response/result/doc[1]/float[@name='id'][.='2.0']",
|
||||
|
@ -168,9 +168,9 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+" nullPolicy=collapse}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=3]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
"/response/result/doc[1]/float[@name='id'][.='3.0']",
|
||||
|
@ -188,11 +188,11 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params = new ModifiableSolrParams();
|
||||
params.add("q", "type_s:parent");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.q", "type_s:child");
|
||||
params.add("expand.field", group);
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
"/response/result/doc[1]/float[@name='id'][.='1.0']",
|
||||
|
@ -210,11 +210,11 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "type_s:parent");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.fq", "type_s:child");
|
||||
params.add("expand.field", group);
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
"/response/result/doc[1]/float[@name='id'][.='1.0']",
|
||||
|
@ -231,12 +231,12 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "type_s:parent");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.q", "type_s:child");
|
||||
params.add("expand.fq", "*:*");
|
||||
params.add("expand.field", group);
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
"/response/result/doc[1]/float[@name='id'][.='1.0']",
|
||||
|
@ -253,9 +253,9 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
params.add("expand.rows", "1");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=2]",
|
||||
|
@ -271,12 +271,12 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
//Test no group results
|
||||
|
||||
params = new ModifiableSolrParams();
|
||||
params.add("q", "test_ti:5");
|
||||
params.add("q", "test_i:5");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
params.add("expand.rows", "1");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=1]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=0]"
|
||||
|
@ -285,12 +285,12 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
//Test zero results
|
||||
|
||||
params = new ModifiableSolrParams();
|
||||
params.add("q", "test_ti:5532535");
|
||||
params.add("q", "test_i:5532535");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("expand.sort", "test_tl desc");
|
||||
params.add("expand.sort", "test_l desc");
|
||||
params.add("expand.rows", "1");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=0]",
|
||||
"*[count(/response/lst[@name='expanded']/result)=0]"
|
||||
|
@ -302,7 +302,7 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
|
|||
params.add("q", "*:*");
|
||||
params.add("fq", "{!collapse field="+group+hint+"}");
|
||||
params.add("defType", "edismax");
|
||||
params.add("bf", "field(test_ti)");
|
||||
params.add("bf", "field(test_i)");
|
||||
params.add("expand", "true");
|
||||
params.add("fl", "id");
|
||||
assertQ(req(params), "*[count(/response/result/doc)=2]",
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
package org.apache.solr.search;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
@ -915,4 +916,21 @@ public class TestCollapseQParserPlugin extends SolrTestCaseJ4 {
|
|||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test64BitCollapseFieldException() {
|
||||
ModifiableSolrParams doubleParams = new ModifiableSolrParams();
|
||||
doubleParams.add("q", "*:*");
|
||||
doubleParams.add("fq", "{!collapse field=group_d}");
|
||||
expectThrows(RuntimeException.class, IOException.class, () -> h.query(req(doubleParams)));
|
||||
|
||||
ModifiableSolrParams dateParams = new ModifiableSolrParams();
|
||||
dateParams.add("q", "*:*");
|
||||
dateParams.add("fq", "{!collapse field=group_dt}");
|
||||
expectThrows(RuntimeException.class, IOException.class, () -> h.query(req(dateParams)));
|
||||
|
||||
ModifiableSolrParams longParams = new ModifiableSolrParams();
|
||||
longParams.add("q", "*:*");
|
||||
longParams.add("fq", "{!collapse field=group_l}");
|
||||
expectThrows(RuntimeException.class, IOException.class, () -> h.query(req(longParams)));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue