mirror of https://github.com/apache/lucene.git
SOLR-10891: Don't require docvalues on BBoxField
This commit is contained in:
parent
ee18a5f641
commit
5c498b411d
|
@ -92,9 +92,6 @@ public class BBoxField extends AbstractSpatialFieldType<BBoxStrategy> implements
|
|||
if (numberType.getNumberType() != NumberType.DOUBLE) {
|
||||
throw new RuntimeException("Must be Double number type: " + numberType);
|
||||
}
|
||||
if ( ! numberType.hasProperty(DOC_VALUES)) {
|
||||
throw new RuntimeException("Must have doc values: " + numberType);
|
||||
}
|
||||
|
||||
//note: this only works for explicit fields, not dynamic fields
|
||||
List<SchemaField> fields = new ArrayList<>(schema.getFields().values());//copy, because we modify during iteration
|
||||
|
|
|
@ -56,6 +56,9 @@
|
|||
<fieldType name="bbox" class="solr.BBoxField"
|
||||
numberType="tdoubleDV" distanceUnits="degrees" storeSubFields="false"/>
|
||||
|
||||
<fieldType name="bbox_ndv" class="solr.BBoxField"
|
||||
numberType="tdouble" distanceUnits="degrees" storeSubFields="false" docValues="false"/>
|
||||
|
||||
<fieldType name="pbbox" class="solr.BBoxField"
|
||||
numberType="pdouble" distanceUnits="degrees" storeSubFields="false"/>
|
||||
|
||||
|
@ -71,6 +74,7 @@
|
|||
<field name="srptgeom" type="srptgeom"/>
|
||||
<field name="bbox" type="bbox"/>
|
||||
<field name="pbbox" type="pbbox"/>
|
||||
<field name="bbox_ndv" type="bbox_ndv"/>
|
||||
<field name="llp" type="llp" indexed="true" docValues="true" />
|
||||
<field name="llp_idx" type="llp" indexed="true" docValues="false" />
|
||||
<field name="llp_dv" type="llp" indexed="false" docValues="true" />
|
||||
|
|
|
@ -53,7 +53,7 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
|
|||
@ParametersFactory
|
||||
public static Iterable<Object[]> parameters() {
|
||||
return Arrays.asList(new Object[][]{
|
||||
{"llp"}, {"llp_idx"}, {"llp_dv"}, {"srpt_geohash"}, {"srpt_quad"}, {"srpt_packedquad"}, {"stqpt_geohash"}, {"pointvector"}, {"bbox"}, {"pbbox"}
|
||||
{"llp"}, {"llp_idx"}, {"llp_dv"}, {"srpt_geohash"}, {"srpt_quad"}, {"srpt_packedquad"}, {"stqpt_geohash"}, {"pointvector"}, {"bbox"}, {"pbbox"}, {"bbox_ndv"}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -178,8 +178,14 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
|
|||
checkHits(fieldName, true, pt, distKM, sphereRadius, count, docIds);
|
||||
}
|
||||
|
||||
private boolean isBBoxField(String fieldName) {
|
||||
return fieldName.equalsIgnoreCase("bbox")
|
||||
|| fieldName.equalsIgnoreCase("pbbox")
|
||||
|| fieldName.equalsIgnoreCase("bbox_ndv");
|
||||
}
|
||||
|
||||
private void checkHits(String fieldName, boolean exact, String ptStr, double distKM, double sphereRadius, int count, int ... docIds) throws ParseException {
|
||||
if (exact && fieldName.equalsIgnoreCase("bbox") | fieldName.equalsIgnoreCase("pbbox")) {
|
||||
if (exact && isBBoxField(fieldName)) {
|
||||
return; // bbox field only supports rectangular query
|
||||
}
|
||||
String [] tests = new String[docIds != null && docIds.length > 0 ? docIds.length + 1 : 1];
|
||||
|
@ -369,9 +375,9 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
|
|||
|
||||
private String radiusQuery(double lat, double lon, double dDEG, String score, String filter) {
|
||||
//Choose between the Solr/Geofilt syntax, and the Lucene spatial module syntax
|
||||
if (fieldName.equals("bbox") || fieldName.equals("pbbox") || random().nextBoolean()) {
|
||||
if (isBBoxField(fieldName) || random().nextBoolean()) {
|
||||
//we cheat for bbox strategy which doesn't do radius, only rect.
|
||||
final String qparser = (fieldName.equals("bbox") || fieldName.equals("pbbox")) ? "bbox" : "geofilt";
|
||||
final String qparser = isBBoxField(fieldName) ? "bbox" : "geofilt";
|
||||
return "{!" + qparser + " " +
|
||||
"sfield=" + fieldName + " "
|
||||
+ (score != null ? "score="+score : "") + " "
|
||||
|
@ -389,7 +395,7 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
|
|||
public void testSortMultiVal() throws Exception {
|
||||
assumeTrue("dist sorting not supported on field " + fieldName, canCalcDistance);
|
||||
assumeFalse("Multivalue not supported for this field",
|
||||
fieldName.equals("pointvector") || fieldName.equals("bbox") || fieldName.equals("pbbox"));
|
||||
fieldName.equals("pointvector") || isBBoxField(fieldName));
|
||||
|
||||
assertU(adoc("id", "100", fieldName, "1,2"));//1 point
|
||||
assertU(adoc("id", "101", fieldName, "4,-1", fieldName, "3,5"));//2 points, 2nd is pretty close to query point
|
||||
|
|
Loading…
Reference in New Issue