You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by md...@apache.org on 2021/12/07 15:49:52 UTC
[lucene-solr] branch branch_8_11 updated: SOLR-15833 Spatial types should work with exists query (#2624)
This is an automated email from the ASF dual-hosted git repository.
mdrob pushed a commit to branch branch_8_11
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8_11 by this push:
new 187fc9c SOLR-15833 Spatial types should work with exists query (#2624)
187fc9c is described below
commit 187fc9c1b0054d92f9c842cfe4b8d8cb2fbd5a4b
Author: Mike Drob <md...@apache.org>
AuthorDate: Tue Dec 7 09:49:27 2021 -0600
SOLR-15833 Spatial types should work with exists query (#2624)
Co-Authored-By: Houston Putman <ho...@apache.org>
---
solr/CHANGES.txt | 2 ++
.../org/apache/solr/schema/AbstractSpatialFieldType.java | 9 +++++++++
.../org/apache/solr/schema/ExternalFileFieldSortTest.java | 2 ++
.../src/test/org/apache/solr/search/TestSolr4Spatial.java | 5 +++++
.../test/org/apache/solr/search/TestSolrQueryParser.java | 14 +++++++-------
5 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9c81dfb..b01727d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -37,6 +37,8 @@ Bug Fixes
* SOLR-15199: Pass thru all command actions not explicitly handled by the bin/solr script, such as 'api', to the SolrCLI Java app (Timothy Potter)
+* SOLR-15833: Enable exists queries on spatial types. (Mike Drob, Houston Putman)
+
================== 8.11.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java b/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java
index da21a53..2d1eaab 100644
--- a/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java
+++ b/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java
@@ -34,12 +34,14 @@ import com.google.common.cache.CacheBuilder;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.index.IndexableField;
+import org.apache.lucene.index.Term;
import org.apache.lucene.queries.function.FunctionScoreQuery;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.DoubleValuesSource;
import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.SortField;
import org.apache.lucene.spatial.SpatialStrategy;
@@ -336,6 +338,13 @@ public abstract class AbstractSpatialFieldType<T extends SpatialStrategy> extend
}
@Override
+ protected Query getSpecializedExistenceQuery(QParser parser, SchemaField field) {
+ PrefixQuery query = new PrefixQuery(new Term(field.getName(), ""));
+ query.setRewriteMethod(field.getType().getRewriteMethod(parser, field));
+ return query;
+ }
+
+ @Override
public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) {
return getQueryFromSpatialArgs(parser, field, parseSpatialArgs(parser, externalVal));
}
diff --git a/solr/core/src/test/org/apache/solr/schema/ExternalFileFieldSortTest.java b/solr/core/src/test/org/apache/solr/schema/ExternalFileFieldSortTest.java
index 632b413..ee56edb 100644
--- a/solr/core/src/test/org/apache/solr/schema/ExternalFileFieldSortTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/ExternalFileFieldSortTest.java
@@ -52,6 +52,8 @@ public class ExternalFileFieldSortTest extends SolrTestCaseJ4 {
"//result/doc[position()=1]/str[.='3']",
"//result/doc[position()=2]/str[.='1']",
"//result/doc[position()=10]/str[.='8']");
+
+ assertQ("test exists", req("q", "*:*", "sort", "exists(eff) desc"));
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
index 7722664..dfc3d82 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
@@ -172,6 +172,11 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
checkHits(fieldName, "0,0", 100, DistanceUtils.EARTH_MEAN_RADIUS_KM, 0);//doesn't error
}
+ @Test
+ public void testExistsQuery() {
+ assertQ(req("q", fieldName + ":*", "fl", "id," + fieldName));
+ }
+
private void checkHits(String fieldName, String pt, double distKM, double sphereRadius, int count, int ... docIds) throws ParseException {
checkHits(fieldName, true, pt, distKM, sphereRadius, count, docIds);
}
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
index c563981..21e0b34 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
@@ -1478,13 +1478,13 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
public void testFieldExistsQueries() throws SyntaxError {
SolrQueryRequest req = req();
String[] fieldSuffix = new String[] {
- "ti", "tf", "td", "tl", "tdt",
- "pi", "pf", "pd", "pl", "pdt",
- "i", "f", "d", "l", "dt", "s", "b",
- "is", "fs", "ds", "ls", "dts", "ss", "bs",
- "i_dv", "f_dv", "d_dv", "l_dv", "dt_dv", "s_dv", "b_dv",
- "is_dv", "fs_dv", "ds_dv", "ls_dv", "dts_dv", "ss_dv", "bs_dv",
- "i_dvo", "f_dvo", "d_dvo", "l_dvo", "dt_dvo",
+ "ti", "tf", "td", "tl", "tdt", // trie types
+ "pi", "pf", "pd", "pl", "pdt", // point types
+ "i", "f", "d", "l", "dt", "s", "b", // numeric types
+ "is", "fs", "ds", "ls", "dts", "ss", "bs", // multi-valued
+ "i_dv", "f_dv", "d_dv", "l_dv", "dt_dv", "s_dv", "b_dv", // numerics + docValues
+ "is_dv", "fs_dv", "ds_dv", "ls_dv", "dts_dv", "ss_dv", "bs_dv", // multi-docValues
+ "i_dvo", "f_dvo", "d_dvo", "l_dvo", "dt_dvo", // not indexed
"t",
"t_on", "b_norms", "s_norms", "dt_norms", "i_norms", "l_norms", "f_norms", "d_norms"
};