You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ab...@apache.org on 2021/06/02 10:43:13 UTC

[solr] branch jira/solr-15449 created (now 24c0a57)

This is an automated email from the ASF dual-hosted git repository.

abenedetti pushed a change to branch jira/solr-15449
in repository https://gitbox.apache.org/repos/asf/solr.git.


      at 24c0a57  [SEARCH-15449] sow and mm fix

This branch includes the following new commits:

     new 2c0d864  Merge remote-tracking branch 'origin/main' into jira/solr-15449
     new 24c0a57  [SEARCH-15449] sow and mm fix

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[solr] 02/02: [SEARCH-15449] sow and mm fix

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abenedetti pushed a commit to branch jira/solr-15449
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 24c0a570b86b3bb91cc40ea754c93e3a7d418d8b
Author: Alessandro Benedetti <a....@sease.io>
AuthorDate: Wed Jun 2 11:42:44 2021 +0100

    [SEARCH-15449] sow and mm fix
---
 .../apache/solr/parser/SolrQueryParserBase.java    |   6 +-
 .../solr/search/TestExtendedDismaxParser.java      | 105 ++++++++-------------
 2 files changed, 40 insertions(+), 71 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java b/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
index 37ec1a4..903a49f 100644
--- a/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
+++ b/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
@@ -62,7 +62,6 @@ import org.apache.solr.query.FilterQuery;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
-import org.apache.solr.schema.StrField;
 import org.apache.solr.schema.TextField;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.QueryUtils;
@@ -1156,9 +1155,6 @@ public abstract class SolrQueryParserBase extends QueryBuilder {
         } else {
           if (queryTerms.size() == 1) {
             return ft.getFieldQuery(parser, sf, queryTerms.get(0));
-          } else if(ft instanceof StrField){
-            String queryText = String.join(" ", queryTerms);
-            return ft.getFieldQuery(parser, sf, queryText);
           } else {
             List<Query> subqs = new ArrayList<>();
             for (String queryTerm : queryTerms) {
@@ -1166,7 +1162,7 @@ public abstract class SolrQueryParserBase extends QueryBuilder {
                 subqs.add(ft.getFieldQuery(parser, sf, queryTerm));
               } catch (Exception e) {
                 /*
-                This happens when a field tries to parse a query term of incompatible type
+                This happens when a field tries to parse a query term that has a type incompatible with the field
                 e.g.
                 a numerical field trying to parse a textual query term
                  */
diff --git a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
index f32cbfa..aed60be 100644
--- a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
@@ -112,10 +112,6 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
     assertU(adoc("id", "72", "text_sw", "wifi ATM"));
     assertU(adoc("id", "73", "shingle23", "A B X D E"));
     assertU(adoc("id", "74", "isocharfilter", "niƱo"));
-    assertU(adoc("id", "75", "trait_ss", "multi term"));
-    assertU(adoc("id", "76", "foo_i", "101"));
-    assertU(adoc("id", "77", "foo_i", "102"));
-
 //    assertU(adoc("id", "74", "text_pick_best", "tabby"));
 //    assertU(adoc("id", "74", "text_as_distinct", "persian"));
 
@@ -419,32 +415,8 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
     assertQ(req("defType","edismax", "mm","0", "q","Terminator: 100", "qf","movies_t foo_i"),
             twor);
 
-    /*
-     * in multi-field search with different analysis per field
-     * sow=true implies the minimum should match is "per document"
-     * i.e a document to be a match must contain all the mm query terms anywhere at least once
-     * sow=false implies the minimum should match is "per field"
-     * i.e a document to be a match must contain all the mm query terms in a single field at least once
-     */
-    assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i", "sow","true"),
-        nor); //no document contains both terms, even in separate fields
-
-    assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i", "sow","false"),
-            nor); //no document contains both terms, in a field
-    assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i"), // default sow=false
-        nor); //no document contains both terms, in a field
-
-    assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 8", "qf","movies_t foo_i","sow","true"),
-          oner); //document 46 contains both terms, Terminator in movies_t and 8 in foo_i
-    assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 8", "qf","movies_t foo_i","sow","false"),
-            nor); //no document contains both terms, in a field
-
-    assertQ(req("defType","edismax", "mm","100%", "q","mission impossible Terminator: 8", "qf","movies_t foo_i","sow","true"),
-        oner); //document 46 contains all terms, mission, impossible, Terminator in movies_t and 8 in foo_i
-    assertQ(req("defType","edismax", "mm","100%", "q","mission impossible Terminator: 8", "qf","movies_t foo_i","sow","false"),
-        nor); //no document contains all terms, in a field
-
     
+
     assertQ(req("defType","edismax", "mm","0", "q","movies_t:Terminator 100", "qf","movies_t foo_i"),
             twor);
     
@@ -724,20 +696,20 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
         nor);
     
     assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias^10.0", "f.myalias.qf","name^2.0 mytrait_ss^5.0"), oner);
-    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias^10.0", "f.myalias.qf","name^2.0 trait_ss^5.0","sow","true"), twor);
-    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias^10.0", "f.myalias.qf","name^2.0 trait_ss^5.0", "mm", "100%","sow","true"), oner);
-    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","who^10.0 where^3.0", "f.who.qf","name^2.0", "f.where.qf", "mytrait_ss^5.0","sow","true"), oner);
+    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias^10.0", "f.myalias.qf","name^2.0 trait_ss^5.0"), twor);
+    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias^10.0", "f.myalias.qf","name^2.0 trait_ss^5.0", "mm", "100%"), oner);
+    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","who^10.0 where^3.0", "f.who.qf","name^2.0", "f.where.qf", "mytrait_ss^5.0"), oner);
     
-    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias", "f.myalias.qf","name mytrait_ss", "uf", "myalias","sow","true"), oner);
+    assertQ(req("defType","edismax", "q","Zapp Obnoxious", "qf","myalias", "f.myalias.qf","name mytrait_ss", "uf", "myalias"), oner);
     
-    assertQ(req("defType","edismax", "uf","who", "q","who:(Zapp Obnoxious)", "f.who.qf", "name^2.0 trait_ss^5.0", "qf", "id","sow","true"), twor);
-    assertQ(req("defType","edismax", "uf","* -name", "q","who:(Zapp Obnoxious)", "f.who.qf", "name^2.0 trait_ss^5.0","sow","true"), twor);
+    assertQ(req("defType","edismax", "uf","who", "q","who:(Zapp Obnoxious)", "f.who.qf", "name^2.0 trait_ss^5.0", "qf", "id"), twor);
+    assertQ(req("defType","edismax", "uf","* -name", "q","who:(Zapp Obnoxious)", "f.who.qf", "name^2.0 trait_ss^5.0"), twor);
     
   }
   
   public void testAliasingBoost() throws Exception {
-    assertQ(req("defType","edismax", "q","Zapp Pig", "qf","myalias", "f.myalias.qf","name trait_ss^0.1","sow","true"), "//result/doc[1]/str[@name='id']=42", "//result/doc[2]/str[@name='id']=47");//doc 42 should score higher than 46
-    assertQ(req("defType","edismax", "q","Zapp Pig", "qf","myalias^100 name", "f.myalias.qf","trait_ss^0.1","sow","true"), "//result/doc[1]/str[@name='id']=47", "//result/doc[2]/str[@name='id']=42");//Now the order should be inverse
+    assertQ(req("defType","edismax", "q","Zapp Pig", "qf","myalias", "f.myalias.qf","name trait_ss^0.1"), "//result/doc[1]/str[@name='id']=42", "//result/doc[2]/str[@name='id']=47");//doc 42 should score higher than 46
+    assertQ(req("defType","edismax", "q","Zapp Pig", "qf","myalias^100 name", "f.myalias.qf","trait_ss^0.1"), "//result/doc[1]/str[@name='id']=47", "//result/doc[2]/str[@name='id']=42");//Now the order should be inverse
   }
   
   /** SOLR-13203 **/
@@ -1787,40 +1759,41 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
     assertThat(parsedquery, anyOf(containsString("((name:stigma | title:stigma))"), containsString("((title:stigma | name:stigma))")));
   }
 
-    @Test 
-    public void testQf_stringFieldWithSowFalse_shouldBuildSingleQueryClause() throws Exception
-    {
-        assertJQ(req("qf", "trait_ss", "defType", "edismax", "q", "multi term", "sow", "false"),
-            "/response/numFound==1", "/response/docs/[0]/id=='75'");
-
-        String parsedquery = getParsedQuery(
-            req("qf", "trait_ss", "q", "multi term", "defType", "edismax", "sow", "false", "debugQuery", "true"));
-        assertThat(parsedquery, anyOf(containsString("((trait_ss:multi term))")));
-    }
-
-    @Test
-    public void testQf_numericField_shouldBuildMultipleQueryClausesIndependentlyOfSow() throws Exception
-    {
-        assertJQ(req("qf", "foo_i", "defType", "edismax", "q", "101 102", "sow", "false"),
-            "/response/numFound==2", "/response/docs/[0]/id=='76'", "/response/docs/[1]/id=='77'");
-
-        String parsedquery = getParsedQuery(
-            req("qf", "foo_i", "q", "101 102", "defType", "edismax", "sow", "false", "debugQuery", "true"));
-        assertThat(parsedquery, anyOf(containsString("foo_i:[101 TO 101]"), containsString("foo_i:[102 TO 102]")));
-
-        assertJQ(req("qf", "foo_i", "defType", "edismax", "q", "101 102", "sow", "true"),
-            "/response/numFound==2", "/response/docs/[0]/id=='76'", "/response/docs/[1]/id=='77'");
-
-        parsedquery = getParsedQuery(
-            req("qf", "foo_i", "q", "101 102", "defType", "edismax", "sow", "true", "debugQuery", "true"));
-        assertThat(parsedquery, anyOf(containsString("foo_i:[101 TO 101]"), containsString("foo_i:[102 TO 102]")));
-    }
-
   private static String getParsedQuery(SolrQueryRequest request) throws Exception {
     String resp = h.query(request);
     return (String) BaseTestHarness.evaluateXPath(resp, "//str[@name='parsedquery']/text()", XPathConstants.STRING);
   }
   
+  public void testSplitOnWhitespace_shouldRespectMinimumShouldMatch(){
+        String oner = "*[count(//doc)=1]";
+        String nor = "*[count(//doc)=0]";
+        /*
+         * in multi-field search with different analysis per field
+         * sow=true causes the minimum should match to be "per document"
+         * i.e a document to be a match must contain all the mm query terms anywhere at least once
+         * sow=false causes the minimum should match to be "per field"
+         * i.e a document to be a match must contain all the mm query terms in a single field at least once
+         * See  https://issues.apache.org/jira/browse/SOLR-12779 for additional details
+         */
+        assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i", "sow","true"),
+            nor); //no document contains both terms, in a field or in multiple field
+
+        assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i", "sow","false"),
+            nor); //no document contains both terms in a field
+        assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 100", "qf","movies_t foo_i"), // default sow=false
+            nor); //no document contains both terms in a field
+
+        assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 8", "qf","movies_t foo_i","sow","true"),
+            oner); //document 46 contains both terms, Terminator in movies_t and 8 in foo_i
+        assertQ(req("defType","edismax", "mm","100%", "q","Terminator: 8", "qf","movies_t foo_i","sow","false"),
+            nor); //no document contains both terms in a field
+
+        assertQ(req("defType","edismax", "mm","100%", "q","mission impossible Terminator: 8", "qf","movies_t foo_i","sow","true"),
+            oner); //document 46 contains all terms, mission, impossible, Terminator in movies_t and 8 in foo_i
+        assertQ(req("defType","edismax", "mm","100%", "q","mission impossible Terminator: 8", "qf","movies_t foo_i","sow","false"),
+            nor); //no document contains all terms, in a field
+    }
+    
   public void testSplitOnWhitespace_Different_Field_Analysis() throws Exception {
     // When the *structure* of produced queries is different in each field, 
     // sow=true produces boolean-of-dismax query structure,

[solr] 01/02: Merge remote-tracking branch 'origin/main' into jira/solr-15449

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abenedetti pushed a commit to branch jira/solr-15449
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 2c0d864340bbc73241e616072fa61ff5357a9d82
Merge: 8679ce2 3f8456f
Author: Alessandro Benedetti <a....@sease.io>
AuthorDate: Wed Jun 2 11:30:45 2021 +0100

    Merge remote-tracking branch 'origin/main' into jira/solr-15449

 .github/PULL_REQUEST_TEMPLATE.md                   |   2 +
 README.md                                          |  31 +
 gradle/defaults.gradle                             |   6 +-
 gradle/help.gradle                                 |   1 +
 help/dependencies.txt                              |  24 +
 solr/CHANGES.txt                                   |  45 +-
 .../apache/solr/ltr/feature/FieldValueFeature.java | 189 +++-
 .../solr/ltr/model/MultipleAdditiveTreesModel.java | 152 ++--
 .../test-files/solr/collection1/conf/schema.xml    |  30 +
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    | 155 +++-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  | 345 +++----
 .../solr/ltr/feature/TestFieldValueFeature.java    | 350 ++++++--
 .../org/apache/solr/ltr/model/TestLinearModel.java |   8 +-
 .../conf/grafana-solr-dashboard.json               |   2 -
 solr/core/build.gradle                             |   2 -
 .../java/org/apache/solr/cloud/ConfigSetCmds.java  |   4 -
 .../org/apache/solr/cloud/ReplicateFromLeader.java |  18 +-
 .../org/apache/solr/cloud/ZkConfigSetService.java  |   6 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |  14 -
 .../cloud/api/collections/DeleteReplicaCmd.java    |   1 -
 .../api/collections/ReindexCollectionCmd.java      |  16 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  71 --
 .../solr/core/FileSystemConfigSetService.java      |   4 +-
 .../java/org/apache/solr/core/MetricsConfig.java   |  19 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   4 -
 .../solr/handler/admin/CollectionsHandler.java     |   2 -
 .../solr/handler/admin/CoreAdminOperation.java     |  23 -
 .../solr/handler/admin/MetricsHistoryHandler.java  | 992 ---------------------
 .../reporters/solr/SolrClusterReporter.java        | 295 ------
 .../metrics/reporters/solr/SolrShardReporter.java  | 189 ----
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    | 273 ------
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    | 468 ----------
 .../org/apache/solr/metrics/rrd/package-info.java  |  22 -
 .../solr/security/PermissionNameProvider.java      |   1 -
 .../apache/solr/servlet/SolrDispatchFilter.java    |   3 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |  33 +-
 .../src/java/org/apache/solr/util/CryptoKeys.java  | 142 ---
 .../core/src/test-files/solr/solr-solrreporter.xml |  69 --
 .../solr/cloud/MetricsHistoryIntegrationTest.java  | 190 ----
 .../MetricsHistoryWithAuthIntegrationTest.java     |  93 --
 .../OverseerCollectionConfigSetProcessorTest.java  |   3 +-
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |  13 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |  47 +-
 .../apache/solr/cloud/TestPullReplicaWithAuth.java |   3 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |  16 +-
 .../handler/admin/MetricsHistoryHandlerTest.java   | 116 ---
 .../reporters/solr/SolrCloudReportersTest.java     | 191 ----
 .../reporters/solr/SolrShardReporterTest.java      | 130 ---
 .../metrics/rrd/SolrRrdBackendFactoryTest.java     | 256 ------
 .../apache/solr/security/JWTAuthPluginTest.java    |   2 +-
 solr/docker/build.gradle                           | 382 ++++++--
 solr/docker/gradle-help.txt                        |  27 +
 .../Dockerfile.body.template}                      |  43 +-
 .../templates/Dockerfile.local.header.template     |  29 +
 .../templates/Dockerfile.official.header.template  |  79 ++
 solr/licenses/commons-lang-2.6.jar.sha1            |   1 -
 solr/licenses/commons-lang-LICENSE-ASL.txt         | 202 -----
 solr/licenses/commons-lang-NOTICE.txt              |   5 -
 .../http2-client-9.4.34.v20201102.jar.sha1         |   1 -
 .../http2-client-9.4.41.v20210516.jar.sha1         |   1 +
 .../http2-common-9.4.34.v20201102.jar.sha1         |   1 -
 .../http2-common-9.4.41.v20210516.jar.sha1         |   1 +
 .../licenses/http2-hpack-9.4.34.v20201102.jar.sha1 |   1 -
 .../licenses/http2-hpack-9.4.41.v20210516.jar.sha1 |   1 +
 ...http-client-transport-9.4.34.v20201102.jar.sha1 |   1 -
 ...http-client-transport-9.4.41.v20210516.jar.sha1 |   1 +
 .../http2-server-9.4.34.v20201102.jar.sha1         |   1 -
 .../http2-server-9.4.41.v20210516.jar.sha1         |   1 +
 .../jetty-alpn-client-9.4.34.v20201102.jar.sha1    |   1 -
 .../jetty-alpn-client-9.4.41.v20210516.jar.sha1    |   1 +
 ...etty-alpn-java-client-9.4.34.v20201102.jar.sha1 |   1 -
 ...etty-alpn-java-client-9.4.41.v20210516.jar.sha1 |   1 +
 ...etty-alpn-java-server-9.4.34.v20201102.jar.sha1 |   1 -
 ...etty-alpn-java-server-9.4.41.v20210516.jar.sha1 |   1 +
 .../jetty-alpn-server-9.4.34.v20201102.jar.sha1    |   1 -
 .../jetty-alpn-server-9.4.41.v20210516.jar.sha1    |   1 +
 .../jetty-client-9.4.34.v20201102.jar.sha1         |   1 -
 .../jetty-client-9.4.41.v20210516.jar.sha1         |   1 +
 .../jetty-continuation-9.4.34.v20201102.jar.sha1   |   1 -
 .../jetty-continuation-9.4.41.v20210516.jar.sha1   |   1 +
 .../jetty-deploy-9.4.34.v20201102.jar.sha1         |   1 -
 .../jetty-deploy-9.4.41.v20210516.jar.sha1         |   1 +
 solr/licenses/jetty-http-9.4.34.v20201102.jar.sha1 |   1 -
 solr/licenses/jetty-http-9.4.41.v20210516.jar.sha1 |   1 +
 solr/licenses/jetty-io-9.4.34.v20201102.jar.sha1   |   1 -
 solr/licenses/jetty-io-9.4.41.v20210516.jar.sha1   |   1 +
 solr/licenses/jetty-jmx-9.4.34.v20201102.jar.sha1  |   1 -
 solr/licenses/jetty-jmx-9.4.41.v20210516.jar.sha1  |   1 +
 .../jetty-rewrite-9.4.34.v20201102.jar.sha1        |   1 -
 .../jetty-rewrite-9.4.41.v20210516.jar.sha1        |   1 +
 .../jetty-security-9.4.34.v20201102.jar.sha1       |   1 -
 .../jetty-security-9.4.41.v20210516.jar.sha1       |   1 +
 .../jetty-server-9.4.34.v20201102.jar.sha1         |   1 -
 .../jetty-server-9.4.41.v20210516.jar.sha1         |   1 +
 .../jetty-servlet-9.4.34.v20201102.jar.sha1        |   1 -
 .../jetty-servlet-9.4.41.v20210516.jar.sha1        |   1 +
 .../jetty-servlets-9.4.34.v20201102.jar.sha1       |   1 -
 .../jetty-servlets-9.4.41.v20210516.jar.sha1       |   1 +
 .../jetty-start-9.4.34.v20201102-shaded.jar.sha1   |   1 -
 .../jetty-start-9.4.41.v20210516-shaded.jar.sha1   |   1 +
 solr/licenses/jetty-util-9.4.34.v20201102.jar.sha1 |   1 -
 solr/licenses/jetty-util-9.4.41.v20210516.jar.sha1 |   1 +
 .../jetty-util-ajax-9.4.41.v20210516.jar.sha1      |   1 +
 .../jetty-webapp-9.4.34.v20201102.jar.sha1         |   1 -
 .../jetty-webapp-9.4.41.v20210516.jar.sha1         |   1 +
 solr/licenses/jetty-xml-9.4.34.v20201102.jar.sha1  |   1 -
 solr/licenses/jetty-xml-9.4.41.v20210516.jar.sha1  |   1 +
 solr/licenses/jose4j-0.6.5.jar.sha1                |   1 -
 solr/licenses/jose4j-0.7.7.jar.sha1                |   1 +
 solr/licenses/netty-buffer-4.1.50.Final.jar.sha1   |   1 -
 solr/licenses/netty-buffer-4.1.59.Final.jar.sha1   |   1 +
 solr/licenses/netty-codec-4.1.50.Final.jar.sha1    |   1 -
 solr/licenses/netty-codec-4.1.59.Final.jar.sha1    |   1 +
 solr/licenses/netty-common-4.1.50.Final.jar.sha1   |   1 -
 solr/licenses/netty-common-4.1.59.Final.jar.sha1   |   1 +
 solr/licenses/netty-handler-4.1.50.Final.jar.sha1  |   1 -
 solr/licenses/netty-handler-4.1.59.Final.jar.sha1  |   1 +
 solr/licenses/netty-resolver-4.1.50.Final.jar.sha1 |   1 -
 solr/licenses/netty-resolver-4.1.59.Final.jar.sha1 |   1 +
 .../licenses/netty-transport-4.1.50.Final.jar.sha1 |   1 -
 .../licenses/netty-transport-4.1.59.Final.jar.sha1 |   1 +
 ...ty-transport-native-epoll-4.1.50.Final.jar.sha1 |   1 -
 ...ty-transport-native-epoll-4.1.59.Final.jar.sha1 |   1 +
 ...nsport-native-unix-common-4.1.50.Final.jar.sha1 |   1 -
 ...nsport-native-unix-common-4.1.59.Final.jar.sha1 |   1 +
 solr/licenses/rrd4j-3.5.jar.sha1                   |   1 -
 solr/licenses/rrd4j-LICENSE-ASL.txt                | 202 -----
 solr/licenses/rrd4j-NOTICE.txt                     |   2 -
 solr/licenses/zookeeper-3.6.2.jar.sha1             |   1 -
 solr/licenses/zookeeper-3.7.0.jar.sha1             |   1 +
 solr/licenses/zookeeper-jute-3.6.2.jar.sha1        |   1 -
 solr/licenses/zookeeper-jute-3.7.0.jar.sha1        |   1 +
 solr/packaging/build.gradle                        |   6 +
 .../combining-distribution-and-replication.adoc    |   2 +-
 .../distributed-replication.png                    | Bin 0 -> 38896 bytes
 .../worddav4101c16174820e932b44baa22abcfcd1.png    | Bin 54328 -> 0 bytes
 .../leader-follower-replication.png                | Bin 0 -> 18224 bytes
 .../worddav2b7e14725d898b4104cdd9c502fc77cd.png    | Bin 26388 -> 0 bytes
 .../images/suggestions-screen/no-violations.png    | Bin 73333 -> 0 bytes
 .../suggestions-screen/violations-with-action.png  | Bin 152486 -> 0 bytes
 .../src/images/suggestions-screen/violations.png   | Bin 123009 -> 0 bytes
 solr/solr-ref-guide/src/index-replication.adoc     |   2 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |  46 +-
 .../src/major-changes-in-solr-8.adoc               |   2 +-
 .../src/major-changes-in-solr-9.adoc               |   2 +
 .../src/making-and-restoring-backups.adoc          |   2 +-
 solr/solr-ref-guide/src/metrics-history.adoc       | 488 ----------
 solr/solr-ref-guide/src/metrics-reporting.adoc     | 174 +---
 solr/solr-ref-guide/src/monitoring-solr.adoc       |   4 +-
 .../src/rule-based-authorization-plugin.adoc       |   1 -
 solr/solr-ref-guide/src/solr-tutorial.adoc         |   2 +-
 .../solr/client/solrj/io/stream/DrillStream.java   |   4 +-
 .../solr/client/solrj/request/V2Request.java       |   2 +-
 .../java/org/apache/solr/common/SolrException.java |   3 +-
 .../solr/common/cloud/ZkMaintenanceUtils.java      |  15 +-
 .../apache/solr/common/params/CommonParams.java    |   4 +-
 .../apache/solr/common/params/CoreAdminParams.java |   2 -
 .../src/java/org/apache/solr/util/TestHarness.java |   4 -
 solr/webapp/web/css/angular/replication.css        |   4 +-
 .../web/js/angular/controllers/collections.js      |   8 +-
 solr/webapp/web/js/angular/services.js             |   5 +
 versions.lock                                      | 125 ++-
 versions.props                                     |  11 +-
 163 files changed, 1756 insertions(+), 5277 deletions(-)