You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2020/04/16 11:15:59 UTC
[lucene-solr] branch branch_8x updated: SOLR-14291: fix regexps to
handle dotted fields in Old Analytics params.
This is an automated email from the ASF dual-hosted git repository.
mkhl pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8x by this push:
new d448f95 SOLR-14291: fix regexps to handle dotted fields in Old Analytics params.
d448f95 is described below
commit d448f950516a3610d4271af7282fc55b6f176297
Author: Mikhail Khludnev <mk...@apache.org>
AuthorDate: Sun Apr 12 16:55:43 2020 +0300
SOLR-14291: fix regexps to handle dotted fields in Old Analytics params.
---
solr/CHANGES.txt | 2 +
.../solr/analytics/util/OldAnalyticsParams.java | 34 ++++++------
.../util/OldAnalyticsRequestConverter.java | 4 +-
.../analytics/legacy/facetWithDottedFields.txt | 16 ++++++
.../solr/collection1/conf/schema-analytics.xml | 2 +
.../util/OldAnalyticsRequestConverterUnitTest.java | 64 ++++++++++++++++++++++
6 files changed, 103 insertions(+), 19 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 33d5d11..22a5c81 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -65,6 +65,8 @@ Bug Fixes
This is a fix for incomplete optimization made by SOLR-11880 in Solr 7.4 which fixed distributed updates but not
distributed search. (shalin)
+* SOLR-14291: Handle dotted fields in legacy Analytics Component (Anatolii Siuniaev via Mikhail Khludnev)
+
Other Changes
---------------------
* SOLR-14197: SolrResourceLoader: marked many methods as deprecated, and in some cases rerouted exiting logic to avoid
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsParams.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsParams.java
index e59e1cc..7a688d7 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsParams.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsParams.java
@@ -48,14 +48,14 @@ public interface OldAnalyticsParams {
public Map<String,OldQueryFacet> queryFacets = new HashMap<>();
}
- public static final String FIELD_FACET = "ff|fieldfacet";
- public static final String VALUE_FACET = "vf|valuefacet";
- public static final String LIMIT = "l|limit";
- public static final String OFFSET = "off|offset";
- public static final String SHOW_MISSING = "sm|showmissing";
- public static final String SORT_EXPRESSION ="se|sortexpr|sortexpression";
- public static final String OLAP_SORT_EXPRESSION ="ss|sortstat|sortstatistic";
- public static final String SORT_DIRECTION ="sd|sortdirection";
+ public static final String FIELD_FACET = "(?:ff|fieldfacet)";
+ public static final String VALUE_FACET = "(?:vf|valuefacet)";
+ public static final String LIMIT = "(?:l|limit)";
+ public static final String OFFSET = "(?:off|offset)";
+ public static final String SHOW_MISSING = "(?:sm|showmissing)";
+ public static final String SORT_EXPRESSION ="(?:se|sortexpr|sortexpression)";
+ public static final String OLAP_SORT_EXPRESSION ="(?:ss|sortstat|sortstatistic)";
+ public static final String SORT_DIRECTION ="(?:sd|sortdirection)";
public static class OldFieldFacet {
public String field;
@@ -114,13 +114,13 @@ public interface OldAnalyticsParams {
}
}
- public static final String RANGE_FACET = "rf|rangefacet";
- public static final String START = "st|start";
- public static final String END = "e|end";
- public static final String GAP = "g|gap";
- public static final String HARDEND = "he|hardend";
- public static final String INCLUDE_BOUNDARY = "ib|includebound";
- public static final String OTHER_RANGE = "or|otherrange";
+ public static final String RANGE_FACET = "(?:rf|rangefacet)";
+ public static final String START = "(?:st|start)";
+ public static final String END = "(?:e|end)";
+ public static final String GAP = "(?:g|gap)";
+ public static final String HARDEND = "(?:he|hardend)";
+ public static final String INCLUDE_BOUNDARY = "(?:ib|includebound)";
+ public static final String OTHER_RANGE = "(?:or|otherrange)";
public static class OldRangeFacet {
public String field;
@@ -170,8 +170,8 @@ public interface OldAnalyticsParams {
public String[] queries;
}
- public static final String QUERY_FACET = "qf|queryfacet";
- public static final String QUERY = "q|query";
+ public static final String QUERY_FACET = "(?:qf|queryfacet)";
+ public static final String QUERY = "(?:q|query)";
//Defaults
public static final boolean DEFAULT_ABBREVIATE_PREFIX = true;
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsRequestConverter.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsRequestConverter.java
index 60d0d40..1714553 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsRequestConverter.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/OldAnalyticsRequestConverter.java
@@ -38,9 +38,9 @@ public class OldAnalyticsRequestConverter implements OldAnalyticsParams {
private static final Pattern oldFieldFacetPattern =
Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+FIELD_FACET+")$", Pattern.CASE_INSENSITIVE);
private static final Pattern oldFieldFacetParamPattern =
- Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+FIELD_FACET+")\\.([^\\.]+)\\.("+FieldFacetParamParser.regexParamList+")$", Pattern.CASE_INSENSITIVE);
+ Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+FIELD_FACET+")\\.(.*(?=\\.))\\.("+FieldFacetParamParser.regexParamList+")$", Pattern.CASE_INSENSITIVE);
private static final Pattern oldRangeFacetParamPattern =
- Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+RANGE_FACET+")\\.([^\\.]+)\\.("+RangeFacetParamParser.regexParamList+")$", Pattern.CASE_INSENSITIVE);
+ Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+RANGE_FACET+")\\.(.*(?=\\.))\\.("+RangeFacetParamParser.regexParamList+")$", Pattern.CASE_INSENSITIVE);
private static final Pattern oldQueryFacetParamPattern =
Pattern.compile("^(?:"+OLD_PREFIX+")\\.([^\\.]+)\\.(?:"+QUERY_FACET+")\\.([^\\.]+)\\.("+QUERY+")$", Pattern.CASE_INSENSITIVE);
diff --git a/solr/contrib/analytics/src/test-files/solr/analytics/legacy/facetWithDottedFields.txt b/solr/contrib/analytics/src/test-files/solr/analytics/legacy/facetWithDottedFields.txt
new file mode 100644
index 0000000..162cbbd
--- /dev/null
+++ b/solr/contrib/analytics/src/test-files/solr/analytics/legacy/facetWithDottedFields.txt
@@ -0,0 +1,16 @@
+o.df1.s.mean=mean(long.dotfield)
+o.df1.ff=long.dotfield
+o.df1.ff.long.dotfield.ss=mean
+o.df1.ff.long.dotfield.sd=asc
+
+o.df2.s.count=count(long.dotfield)
+o.df2.rf=long.dotfield
+o.df2.rf.long.dotfield.st=5
+o.df2.rf.long.dotfield.end=30
+o.df2.rf.long.dotfield.hardend=True
+o.df2.rf.long.dotfield.g=5
+o.df2.rf.long.dotfield.ib=lower
+o.df2.rf.long.dotfield.or=all
+
+
+
diff --git a/solr/contrib/analytics/src/test-files/solr/collection1/conf/schema-analytics.xml b/solr/contrib/analytics/src/test-files/solr/collection1/conf/schema-analytics.xml
index 6570416..deb282f 100644
--- a/solr/contrib/analytics/src/test-files/solr/collection1/conf/schema-analytics.xml
+++ b/solr/contrib/analytics/src/test-files/solr/collection1/conf/schema-analytics.xml
@@ -62,6 +62,8 @@
<fieldType name="double_pnt" class="solr.DoublePointField" docValues="true" />
<fieldType name="date_pnt" class="solr.DatePointField" docValues="true" />
+ <field name="long.dotfield" type="long_pnt"/>
+
<fieldType name="boolean" class="solr.BoolField" docValues="true"/>
<fieldType name="string" class="solr.StrField" docValues="true"/>
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/util/OldAnalyticsRequestConverterUnitTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/util/OldAnalyticsRequestConverterUnitTest.java
new file mode 100644
index 0000000..d7a2b47
--- /dev/null
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/util/OldAnalyticsRequestConverterUnitTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.analytics.util;
+
+import org.apache.solr.analytics.legacy.facet.LegacyAbstractAnalyticsFacetTest;
+import org.apache.solr.common.params.SolrParams;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.apache.solr.analytics.AnalyticsRequestParser.AnalyticsExpressionSortRequest;
+import static org.apache.solr.analytics.AnalyticsRequestParser.AnalyticsRequest;
+import static org.apache.solr.analytics.AnalyticsRequestParser.AnalyticsValueFacetRequest;
+
+import org.apache.solr.analytics.AnalyticsRequestParser.AnalyticsFacetRequest;
+import org.apache.solr.analytics.AnalyticsRequestParser.AnalyticsRangeFacetRequest;
+
+public class OldAnalyticsRequestConverterUnitTest extends LegacyAbstractAnalyticsFacetTest {
+ String fileName = "facetWithDottedFields.txt";
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ initCore("solrconfig-analytics.xml", "schema-analytics.xml");
+ }
+
+ @Test
+ public void testConvertFieldFacetWithDottedField() throws Exception {
+ SolrParams params = request(fileToStringArr(OldAnalyticsRequestConverterUnitTest.class, fileName)).getParams();
+ AnalyticsRequest request = OldAnalyticsRequestConverter.convert(params);
+ final AnalyticsValueFacetRequest analyticsValueFacetRequest = (AnalyticsValueFacetRequest) request.groupings.get("df1").facets.get("long.dotfield");
+ assertNotNull("Sort param should be parsed for dotted field", analyticsValueFacetRequest.sort);
+ final AnalyticsExpressionSortRequest analyticsExpressionSortRequest = (AnalyticsExpressionSortRequest) analyticsValueFacetRequest.sort.criteria.get(0);
+ assertEquals("Sort param expression should be parsed for dotted field",
+ "mean", analyticsExpressionSortRequest.expression);
+ assertEquals("Sort param direction should be parsed for dotted field",
+ "asc", analyticsExpressionSortRequest.direction);
+ }
+
+ @Test
+ public void testConvertRangeFacetWithDottedField() throws Exception {
+ SolrParams params = request(fileToStringArr(OldAnalyticsRequestConverterUnitTest.class, fileName)).getParams();
+ AnalyticsRequest request = OldAnalyticsRequestConverter.convert(params);
+
+ final AnalyticsFacetRequest analyticsFacetRequest = request.groupings.get("df2").facets.get("long.dotfield");
+ assertNotNull("Range facet param should be parsed for dotted field", analyticsFacetRequest);
+ assertEquals("30", ((AnalyticsRangeFacetRequest)analyticsFacetRequest).end);
+ assertEquals(true, ((AnalyticsRangeFacetRequest)analyticsFacetRequest).hardend);
+
+ }
+}