You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by st...@apache.org on 2023/09/30 02:46:05 UTC

[solr] branch branch_9x updated: SOLR-16985 Upgrade Lucene to 9.8.0 (#1958)

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

stillalex pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new aa09ba0ad38 SOLR-16985 Upgrade Lucene to 9.8.0 (#1958)
aa09ba0ad38 is described below

commit aa09ba0ad38252776487510b669027b7c542c20b
Author: Alex D <st...@apache.org>
AuthorDate: Fri Sep 29 19:38:07 2023 -0700

    SOLR-16985 Upgrade Lucene to 9.8.0 (#1958)
    
    Co-authored-by: Christine Poerschke <cp...@apache.org>
---
 solr/CHANGES.txt                                   |  2 +
 .../org/apache/solr/core/SchemaCodecFactory.java   | 38 +++++++++++++++-
 .../solr/index/SlowCompositeReaderWrapper.java     | 10 ++---
 .../org/apache/solr/schema/DenseVectorField.java   | 11 +++--
 .../solr/search/CollapsingQParserPlugin.java       | 20 ++++-----
 .../apache/solr/search/DelegatingCollector.java    | 18 +++++++-
 .../src/java/org/apache/solr/search/Grouping.java  |  4 +-
 .../solr/search/IGainTermsQParserPlugin.java       |  4 +-
 .../solr/search/SignificantTermsQParserPlugin.java |  6 +--
 .../org/apache/solr/search/SolrIndexSearcher.java  |  6 +--
 .../TextLogisticRegressionQParserPlugin.java       |  4 +-
 .../apache/solr/schema/DenseVectorFieldTest.java   |  2 +-
 .../solr/search/AnalyticsTestQParserPlugin.java    |  4 +-
 .../search/SignificantTermsQParserPluginTest.java  |  4 +-
 .../test/org/apache/solr/search/TestDocSet.java    | 15 +++----
 .../apache/solr/search/neural/KnnQParserTest.java  |  2 +-
 .../licenses/lucene-analysis-common-9.7.0.jar.sha1 |  1 -
 .../licenses/lucene-analysis-common-9.8.0.jar.sha1 |  1 +
 solr/licenses/lucene-analysis-icu-9.7.0.jar.sha1   |  1 -
 solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1   |  1 +
 .../lucene-analysis-kuromoji-9.7.0.jar.sha1        |  1 -
 .../lucene-analysis-kuromoji-9.8.0.jar.sha1        |  1 +
 .../lucene-analysis-morfologik-9.7.0.jar.sha1      |  1 -
 .../lucene-analysis-morfologik-9.8.0.jar.sha1      |  1 +
 solr/licenses/lucene-analysis-nori-9.7.0.jar.sha1  |  1 -
 solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1  |  1 +
 .../lucene-analysis-opennlp-9.7.0.jar.sha1         |  1 -
 .../lucene-analysis-opennlp-9.8.0.jar.sha1         |  1 +
 .../lucene-analysis-phonetic-9.7.0.jar.sha1        |  1 -
 .../lucene-analysis-phonetic-9.8.0.jar.sha1        |  1 +
 .../lucene-analysis-smartcn-9.7.0.jar.sha1         |  1 -
 .../lucene-analysis-smartcn-9.8.0.jar.sha1         |  1 +
 .../lucene-analysis-stempel-9.7.0.jar.sha1         |  1 -
 .../lucene-analysis-stempel-9.8.0.jar.sha1         |  1 +
 .../licenses/lucene-backward-codecs-9.7.0.jar.sha1 |  1 -
 .../licenses/lucene-backward-codecs-9.8.0.jar.sha1 |  1 +
 solr/licenses/lucene-classification-9.7.0.jar.sha1 |  1 -
 solr/licenses/lucene-classification-9.8.0.jar.sha1 |  1 +
 solr/licenses/lucene-codecs-9.7.0.jar.sha1         |  1 -
 solr/licenses/lucene-codecs-9.8.0.jar.sha1         |  1 +
 solr/licenses/lucene-core-9.7.0.jar.sha1           |  1 -
 solr/licenses/lucene-core-9.8.0.jar.sha1           |  1 +
 solr/licenses/lucene-expressions-9.7.0.jar.sha1    |  1 -
 solr/licenses/lucene-expressions-9.8.0.jar.sha1    |  1 +
 solr/licenses/lucene-grouping-9.7.0.jar.sha1       |  1 -
 solr/licenses/lucene-grouping-9.8.0.jar.sha1       |  1 +
 solr/licenses/lucene-highlighter-9.7.0.jar.sha1    |  1 -
 solr/licenses/lucene-highlighter-9.8.0.jar.sha1    |  1 +
 solr/licenses/lucene-join-9.7.0.jar.sha1           |  1 -
 solr/licenses/lucene-join-9.8.0.jar.sha1           |  1 +
 solr/licenses/lucene-memory-9.7.0.jar.sha1         |  1 -
 solr/licenses/lucene-memory-9.8.0.jar.sha1         |  1 +
 solr/licenses/lucene-misc-9.7.0.jar.sha1           |  1 -
 solr/licenses/lucene-misc-9.8.0.jar.sha1           |  1 +
 solr/licenses/lucene-queries-9.7.0.jar.sha1        |  1 -
 solr/licenses/lucene-queries-9.8.0.jar.sha1        |  1 +
 solr/licenses/lucene-queryparser-9.7.0.jar.sha1    |  1 -
 solr/licenses/lucene-queryparser-9.8.0.jar.sha1    |  1 +
 solr/licenses/lucene-sandbox-9.7.0.jar.sha1        |  1 -
 solr/licenses/lucene-sandbox-9.8.0.jar.sha1        |  1 +
 solr/licenses/lucene-spatial-extras-9.7.0.jar.sha1 |  1 -
 solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1 |  1 +
 solr/licenses/lucene-spatial3d-9.7.0.jar.sha1      |  1 -
 solr/licenses/lucene-spatial3d-9.8.0.jar.sha1      |  1 +
 solr/licenses/lucene-suggest-9.7.0.jar.sha1        |  1 -
 solr/licenses/lucene-suggest-9.8.0.jar.sha1        |  1 +
 solr/licenses/lucene-test-framework-9.7.0.jar.sha1 |  1 -
 solr/licenses/lucene-test-framework-9.8.0.jar.sha1 |  1 +
 .../solr/configsets/_default/conf/solrconfig.xml   |  2 +-
 .../conf/solrconfig.xml                            |  2 +-
 .../pages/major-changes-in-solr-9.adoc             |  3 ++
 versions.lock                                      | 52 +++++++++++-----------
 versions.props                                     |  2 +-
 73 files changed, 156 insertions(+), 107 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ac6ad1ce1c9..07fe157f572 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -172,6 +172,8 @@ Dependency Upgrades
 
 * PR#1846: Update io.opentelemetry to 1.29.0 (Alex Deparvu)
 
+* SOLR-16985: Upgrade Lucene to 9.8.0 (Alex Deparvu, Christine Poerschke)
+
 Other Changes
 ---------------------
 
diff --git a/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java b/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
index 8615e0a32ef..2b2933b0f86 100644
--- a/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
@@ -16,16 +16,21 @@
  */
 package org.apache.solr.core;
 
+import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.util.Arrays;
 import java.util.Locale;
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.KnnVectorsFormat;
+import org.apache.lucene.codecs.KnnVectorsReader;
+import org.apache.lucene.codecs.KnnVectorsWriter;
 import org.apache.lucene.codecs.PostingsFormat;
 import org.apache.lucene.codecs.lucene95.Lucene95Codec;
 import org.apache.lucene.codecs.lucene95.Lucene95Codec.Mode;
 import org.apache.lucene.codecs.lucene95.Lucene95HnswVectorsFormat;
+import org.apache.lucene.index.SegmentReadState;
+import org.apache.lucene.index.SegmentWriteState;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.NamedList;
@@ -127,7 +132,8 @@ public class SchemaCodecFactory extends CodecFactory implements SolrCoreAware {
               if (DenseVectorField.HNSW_ALGORITHM.equals(knnAlgorithm)) {
                 int maxConn = vectorType.getHnswMaxConn();
                 int beamWidth = vectorType.getHnswBeamWidth();
-                return new Lucene95HnswVectorsFormat(maxConn, beamWidth);
+                var delegate = new Lucene95HnswVectorsFormat(maxConn, beamWidth);
+                return new SolrDelegatingKnnVectorsFormat(delegate, vectorType.getDimension());
               } else {
                 throw new SolrException(
                     ErrorCode.SERVER_ERROR, knnAlgorithm + " KNN algorithm is not supported");
@@ -145,4 +151,34 @@ public class SchemaCodecFactory extends CodecFactory implements SolrCoreAware {
     assert core != null : "inform must be called first";
     return codec;
   }
+
+  /**
+   * This class exists because Lucene95HnswVectorsFormat's getMaxDimensions method is final and we
+   * need to workaround that constraint to allow more than the default number of dimensions
+   */
+  private static final class SolrDelegatingKnnVectorsFormat extends KnnVectorsFormat {
+    private final KnnVectorsFormat delegate;
+    private final int maxDimensions;
+
+    public SolrDelegatingKnnVectorsFormat(KnnVectorsFormat delegate, int maxDimensions) {
+      super(delegate.getName());
+      this.delegate = delegate;
+      this.maxDimensions = maxDimensions;
+    }
+
+    @Override
+    public KnnVectorsWriter fieldsWriter(SegmentWriteState state) throws IOException {
+      return delegate.fieldsWriter(state);
+    }
+
+    @Override
+    public KnnVectorsReader fieldsReader(SegmentReadState state) throws IOException {
+      return delegate.fieldsReader(state);
+    }
+
+    @Override
+    public int getMaxDimensions(String fieldName) {
+      return maxDimensions;
+    }
+  }
 }
diff --git a/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java b/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
index b066ba373fd..85084f5887b 100644
--- a/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
+++ b/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
@@ -50,7 +50,7 @@ import org.apache.lucene.index.StoredFieldVisitor;
 import org.apache.lucene.index.StoredFields;
 import org.apache.lucene.index.TermVectors;
 import org.apache.lucene.index.Terms;
-import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.search.KnnCollector;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.Version;
 import org.apache.lucene.util.packed.PackedInts;
@@ -368,14 +368,14 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
   }
 
   @Override
-  public TopDocs searchNearestVectors(
-      String field, float[] target, int k, Bits acceptDocs, int visitedLimit) throws IOException {
+  public void searchNearestVectors(
+      String field, float[] target, KnnCollector knnCollector, Bits acceptDocs) throws IOException {
     throw new UnsupportedOperationException();
   }
 
   @Override
-  public TopDocs searchNearestVectors(
-      String field, byte[] target, int k, Bits acceptDocs, int visitedLimit) throws IOException {
+  public void searchNearestVectors(
+      String field, byte[] target, KnnCollector knnCollector, Bits acceptDocs) throws IOException {
     throw new UnsupportedOperationException();
   }
 
diff --git a/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java b/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
index 5d2013cf204..feda6169ea1 100644
--- a/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
+++ b/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
@@ -25,12 +25,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import org.apache.lucene.codecs.KnnVectorsFormat;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.KnnByteVectorField;
 import org.apache.lucene.document.KnnFloatVectorField;
 import org.apache.lucene.document.StoredField;
-import org.apache.lucene.index.ByteVectorValues;
-import org.apache.lucene.index.FloatVectorValues;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.VectorEncoding;
 import org.apache.lucene.index.VectorSimilarityFunction;
@@ -194,24 +193,24 @@ public class DenseVectorField extends FloatPointField {
 
     switch (vectorEncoding) {
       case FLOAT32:
-        if (dimension > FloatVectorValues.MAX_DIMENSIONS) {
+        if (dimension > KnnVectorsFormat.DEFAULT_MAX_DIMENSIONS) {
           if (log.isWarnEnabled()) {
             log.warn(
                 "The vector dimension {} specified for field {} exceeds the current Lucene default max dimension of {}. It's un-tested territory, extra caution and benchmarks are recommended for production systems.",
                 dimension,
                 field.getName(),
-                FloatVectorValues.MAX_DIMENSIONS);
+                KnnVectorsFormat.DEFAULT_MAX_DIMENSIONS);
           }
         }
         break;
       case BYTE:
-        if (dimension > ByteVectorValues.MAX_DIMENSIONS) {
+        if (dimension > KnnVectorsFormat.DEFAULT_MAX_DIMENSIONS) {
           if (log.isWarnEnabled()) {
             log.warn(
                 "The vector dimension {} specified for field {} exceeds the current Lucene default max dimension of {}. It's un-tested territory, extra caution and benchmarks are recommended for production systems.",
                 dimension,
                 field.getName(),
-                ByteVectorValues.MAX_DIMENSIONS);
+                KnnVectorsFormat.DEFAULT_MAX_DIMENSIONS);
           }
         }
         break;
diff --git a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
index 82316adf85f..d19b59470ee 100644
--- a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
@@ -712,7 +712,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       if (contexts.length == 0) {
         return;
       }
@@ -803,7 +803,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
       }
 
       if (delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) delegate).finish();
+        ((DelegatingCollector) delegate).complete();
       }
     }
   }
@@ -919,7 +919,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       if (contexts.length == 0) {
         return;
       }
@@ -993,7 +993,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
       }
 
       if (delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) delegate).finish();
+        ((DelegatingCollector) delegate).complete();
       }
     }
   }
@@ -1196,7 +1196,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       if (contexts.length == 0) {
         return;
       }
@@ -1278,7 +1278,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
       }
 
       if (delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) delegate).finish();
+        ((DelegatingCollector) delegate).complete();
       }
     }
   }
@@ -1443,7 +1443,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       if (contexts.length == 0) {
         return;
       }
@@ -1507,7 +1507,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
       }
 
       if (delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) delegate).finish();
+        ((DelegatingCollector) delegate).complete();
       }
     }
   }
@@ -1587,11 +1587,11 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       // Deal with last group (if any)...
       maybeDelegateCollect();
 
-      super.finish();
+      super.complete();
     }
 
     /**
diff --git a/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java b/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java
index 685a5512b3c..af9b669f01f 100644
--- a/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java
+++ b/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java
@@ -80,9 +80,23 @@ public class DelegatingCollector extends SimpleCollector {
     leafDelegate = delegate.getLeafCollector(context);
   }
 
-  public void finish() throws IOException {
+  /**
+   * From Solr 9.4 using Lucene 9.8 onwards <code>DelegatingCollector.finish</code> clashes with the
+   * super class's <code>LeafCollector.finish</code> method. Please relocate any finishing logic
+   * into the <code>DelegatingCollector.complete</code> replacement completion method.
+   */
+  @Override
+  public final void finish() throws IOException {
+    if (leafDelegate != null) {
+      leafDelegate.finish();
+    }
+    super.finish();
+  }
+
+  /** since 9.4 */
+  public void complete() throws IOException {
     if (delegate instanceof DelegatingCollector) {
-      ((DelegatingCollector) delegate).finish();
+      ((DelegatingCollector) delegate).complete();
     }
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/search/Grouping.java b/solr/core/src/java/org/apache/solr/search/Grouping.java
index bc21b07ff67..6e05b20fb40 100644
--- a/solr/core/src/java/org/apache/solr/search/Grouping.java
+++ b/solr/core/src/java/org/apache/solr/search/Grouping.java
@@ -369,7 +369,7 @@ public class Grouping {
       searchWithTimeLimiter(filterQuery, allCollectors);
 
       if (allCollectors instanceof DelegatingCollector) {
-        ((DelegatingCollector) allCollectors).finish();
+        ((DelegatingCollector) allCollectors).complete();
       }
     }
 
@@ -410,7 +410,7 @@ public class Grouping {
           searchWithTimeLimiter(filterQuery, secondPhaseCollectors);
         }
         if (secondPhaseCollectors instanceof DelegatingCollector) {
-          ((DelegatingCollector) secondPhaseCollectors).finish();
+          ((DelegatingCollector) secondPhaseCollectors).complete();
         }
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
index 74b31fe04cd..011e22c0f6c 100644
--- a/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
@@ -146,7 +146,7 @@ public class IGainTermsQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       NamedList<Double> analytics = new NamedList<>();
       NamedList<Integer> topFreq = new NamedList<>();
       NamedList<Integer> allFreq = new NamedList<>();
@@ -204,7 +204,7 @@ public class IGainTermsQParserPlugin extends QParserPlugin {
       }
 
       if (this.delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) this.delegate).finish();
+        ((DelegatingCollector) this.delegate).complete();
       }
     }
 
diff --git a/solr/core/src/java/org/apache/solr/search/SignificantTermsQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/SignificantTermsQParserPlugin.java
index 2488df85e5b..4e6c09f38f6 100644
--- a/solr/core/src/java/org/apache/solr/search/SignificantTermsQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/SignificantTermsQParserPlugin.java
@@ -109,7 +109,7 @@ public class SignificantTermsQParserPlugin extends QParserPlugin {
     public void collect(int doc) throws IOException {}
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       List<String> outTerms = new ArrayList<>();
       List<Integer> outFreq = new ArrayList<>();
       List<Integer> outQueryFreq = new ArrayList<>();
@@ -174,7 +174,7 @@ public class SignificantTermsQParserPlugin extends QParserPlugin {
     }
 
     @Override
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       List<String> outTerms = new ArrayList<>();
       List<Integer> outFreq = new ArrayList<>();
       List<Integer> outQueryFreq = new ArrayList<>();
@@ -270,7 +270,7 @@ public class SignificantTermsQParserPlugin extends QParserPlugin {
       }
 
       if (this.delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) this.delegate).finish();
+        ((DelegatingCollector) this.delegate).complete();
       }
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index d8a04645dbc..5a3a904c13c 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -280,7 +280,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       qr.setPartialResults(true);
     } catch (EarlyTerminatingCollectorException etce) {
       if (collector instanceof DelegatingCollector) {
-        ((DelegatingCollector) collector).finish();
+        ((DelegatingCollector) collector).complete();
       }
       throw etce;
     } finally {
@@ -293,7 +293,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       }
     }
     if (collector instanceof DelegatingCollector) {
-      ((DelegatingCollector) collector).finish();
+      ((DelegatingCollector) collector).complete();
     }
 
     return collector;
@@ -1133,7 +1133,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
     search(query, collector);
 
     if (collector instanceof DelegatingCollector) {
-      ((DelegatingCollector) collector).finish();
+      ((DelegatingCollector) collector).complete();
     }
 
     return DocSetUtil.getDocSet(setCollector, this);
diff --git a/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
index b72fade0065..0f8142da399 100644
--- a/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
@@ -168,7 +168,7 @@ public class TextLogisticRegressionQParserPlugin extends QParserPlugin {
 
     @Override
     @SuppressWarnings({"unchecked"})
-    public void finish() throws IOException {
+    public void complete() throws IOException {
 
       Map<Integer, double[]> docVectors = new HashMap<>();
       Terms terms =
@@ -230,7 +230,7 @@ public class TextLogisticRegressionQParserPlugin extends QParserPlugin {
       analytics.add("feature", trainingParams.feature);
       analytics.add("positiveLabel", trainingParams.positiveLabel);
       if (this.delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) this.delegate).finish();
+        ((DelegatingCollector) this.delegate).complete();
       }
     }
 
diff --git a/solr/core/src/test/org/apache/solr/schema/DenseVectorFieldTest.java b/solr/core/src/test/org/apache/solr/schema/DenseVectorFieldTest.java
index 8a89a6b6422..03b3fa0d750 100644
--- a/solr/core/src/test/org/apache/solr/schema/DenseVectorFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/DenseVectorFieldTest.java
@@ -461,7 +461,7 @@ public class DenseVectorFieldTest extends AbstractBadConfigTestBase {
   @Test
   public void indexing_highDimensionalityVectorDocument_shouldBeIndexed() throws Exception {
     try {
-      initCore("solrconfig-basic.xml", "schema-densevector-high-dimensionality.xml");
+      initCore("solrconfig_codec.xml", "schema-densevector-high-dimensionality.xml");
 
       List<Float> highDimensionalityVector = new ArrayList<>();
       for (float i = 0; i < 2048f; i++) {
diff --git a/solr/core/src/test/org/apache/solr/search/AnalyticsTestQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/AnalyticsTestQParserPlugin.java
index 489809f549e..7c062695097 100644
--- a/solr/core/src/test/org/apache/solr/search/AnalyticsTestQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/AnalyticsTestQParserPlugin.java
@@ -90,13 +90,13 @@ public class AnalyticsTestQParserPlugin extends QParserPlugin {
 
     @Override
     @SuppressWarnings({"unchecked"})
-    public void finish() throws IOException {
+    public void complete() throws IOException {
       @SuppressWarnings({"rawtypes"})
       NamedList analytics = new NamedList();
       rb.rsp.add("analytics", analytics);
       analytics.add("mycount", count + base);
       if (this.delegate instanceof DelegatingCollector) {
-        ((DelegatingCollector) this.delegate).finish();
+        ((DelegatingCollector) this.delegate).complete();
       }
     }
   }
diff --git a/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java b/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
index cc64c320e50..12c8ec9dfa0 100644
--- a/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
+++ b/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
@@ -81,7 +81,7 @@ public class SignificantTermsQParserPluginTest extends SolrTestCaseJ4 {
           query.getAnalyticsCollector(
               new ResponseBuilder(null, resp, Collections.emptyList()), searcher.get());
       assertNotNull(analyticsCollector);
-      analyticsCollector.finish();
+      analyticsCollector.complete();
       LinkedHashMap<String, Object> expectedValues = new LinkedHashMap<>();
       expectedValues.put("numDocs", 0);
       expectedValues.put("sterms", new ArrayList<String>());
@@ -116,7 +116,7 @@ public class SignificantTermsQParserPluginTest extends SolrTestCaseJ4 {
       DelegatingCollector analyticsCollector =
           query.getAnalyticsCollector(responseBuilder, searcher.get());
       assertNotNull(analyticsCollector);
-      analyticsCollector.finish();
+      analyticsCollector.complete();
 
       LinkedHashMap<String, Object> expectedValues = new LinkedHashMap<>();
       expectedValues.put("numDocs", 1);
diff --git a/solr/core/src/test/org/apache/solr/search/TestDocSet.java b/solr/core/src/test/org/apache/solr/search/TestDocSet.java
index e4729c33a92..60a3d8c91e3 100644
--- a/solr/core/src/test/org/apache/solr/search/TestDocSet.java
+++ b/solr/core/src/test/org/apache/solr/search/TestDocSet.java
@@ -44,7 +44,7 @@ import org.apache.lucene.index.TermVectors;
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.search.DocIdSetIterator;
-import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.search.KnnCollector;
 import org.apache.lucene.search.TotalHits;
 import org.apache.lucene.util.BitSetIterator;
 import org.apache.lucene.util.Bits;
@@ -383,17 +383,12 @@ public class TestDocSet extends SolrTestCase {
       }
 
       @Override
-      public TopDocs searchNearestVectors(
-          String field, float[] target, int k, Bits acceptDocs, int visitedLimit)
-          throws IOException {
-        return null;
-      }
+      public void searchNearestVectors(
+          String field, float[] target, KnnCollector knnCollector, Bits acceptDocs) {}
 
       @Override
-      public TopDocs searchNearestVectors(
-          String field, byte[] target, int k, Bits acceptDoc, int visitedLimits) {
-        return null;
-      }
+      public void searchNearestVectors(
+          String field, byte[] target, KnnCollector knnCollector, Bits acceptDocs) {}
 
       @Override
       protected void doClose() {}
diff --git a/solr/core/src/test/org/apache/solr/search/neural/KnnQParserTest.java b/solr/core/src/test/org/apache/solr/search/neural/KnnQParserTest.java
index 92a05ce5593..5cf2fd41f97 100644
--- a/solr/core/src/test/org/apache/solr/search/neural/KnnQParserTest.java
+++ b/solr/core/src/test/org/apache/solr/search/neural/KnnQParserTest.java
@@ -39,7 +39,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
   @Before
   public void prepareIndex() throws Exception {
     /* vectorDimension="4" similarityFunction="cosine" */
-    initCore("solrconfig-basic.xml", "schema-densevector.xml");
+    initCore("solrconfig_codec.xml", "schema-densevector.xml");
 
     List<SolrInputDocument> docsToIndex = this.prepareDocs();
     for (SolrInputDocument doc : docsToIndex) {
diff --git a/solr/licenses/lucene-analysis-common-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-common-9.7.0.jar.sha1
deleted file mode 100644
index 48853a554ef..00000000000
--- a/solr/licenses/lucene-analysis-common-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-27ba6caaa4587a982cd451f7217b5a982bcfc44a
diff --git a/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1
new file mode 100644
index 00000000000..6b9555a1364
--- /dev/null
+++ b/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1
@@ -0,0 +1 @@
+36f0363325ca7bf62c180160d1ed5165c7c37795
diff --git a/solr/licenses/lucene-analysis-icu-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-icu-9.7.0.jar.sha1
deleted file mode 100644
index e17e815b879..00000000000
--- a/solr/licenses/lucene-analysis-icu-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-94293b169fb8572f440a5a4a523320ecf9778ffe
diff --git a/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1
new file mode 100644
index 00000000000..512bf46865e
--- /dev/null
+++ b/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1
@@ -0,0 +1 @@
+7133d34e92770f59eb28686f4d511b9f3f32e970
diff --git a/solr/licenses/lucene-analysis-kuromoji-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-kuromoji-9.7.0.jar.sha1
deleted file mode 100644
index 1cb53b61d8e..00000000000
--- a/solr/licenses/lucene-analysis-kuromoji-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2df800a38b64867b8dcd61fc2cd986114e4a80cb
diff --git a/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1
new file mode 100644
index 00000000000..4d7de125029
--- /dev/null
+++ b/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1
@@ -0,0 +1 @@
+be44282e1f6b91a0650fcceb558053d6bdd4863d
diff --git a/solr/licenses/lucene-analysis-morfologik-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-morfologik-9.7.0.jar.sha1
deleted file mode 100644
index 08b3abe8f12..00000000000
--- a/solr/licenses/lucene-analysis-morfologik-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dfb4313f3c68d337310522840d7144c1605d084a
diff --git a/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1
new file mode 100644
index 00000000000..db1649319c3
--- /dev/null
+++ b/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1
@@ -0,0 +1 @@
+b054f2c7b11fc7c5601b4c3cdf18aa7508612898
diff --git a/solr/licenses/lucene-analysis-nori-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-nori-9.7.0.jar.sha1
deleted file mode 100644
index 47ae76abb25..00000000000
--- a/solr/licenses/lucene-analysis-nori-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a01e8153f34d72e8c8c0180c1dea5b10f677dd3a
diff --git a/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1
new file mode 100644
index 00000000000..cb1a7f78e51
--- /dev/null
+++ b/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1
@@ -0,0 +1 @@
+bd1f80d33346f7e588685484ef29a304db5190e4
diff --git a/solr/licenses/lucene-analysis-opennlp-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-opennlp-9.7.0.jar.sha1
deleted file mode 100644
index 3419a3d6303..00000000000
--- a/solr/licenses/lucene-analysis-opennlp-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-af475c4941f250d6a94d26130e884798ca57b982
diff --git a/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1
new file mode 100644
index 00000000000..92c8bd6d8a0
--- /dev/null
+++ b/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1
@@ -0,0 +1 @@
+f878344c9742c33a42dd06b51a0a2e73cb49f16c
diff --git a/solr/licenses/lucene-analysis-phonetic-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-phonetic-9.7.0.jar.sha1
deleted file mode 100644
index 3ea0a099d5a..00000000000
--- a/solr/licenses/lucene-analysis-phonetic-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b7d47d54683b0b1e09b271c32d1b7d3eb1990f49
diff --git a/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1
new file mode 100644
index 00000000000..8aa6dd91877
--- /dev/null
+++ b/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1
@@ -0,0 +1 @@
+b9ffdc7a52d2087ecb03318ec06305b480cdfe82
diff --git a/solr/licenses/lucene-analysis-smartcn-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-smartcn-9.7.0.jar.sha1
deleted file mode 100644
index 29630dabbb0..00000000000
--- a/solr/licenses/lucene-analysis-smartcn-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5e68b9816e6cff8ee15f5b350cf2ffa54f9828b7
diff --git a/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1
new file mode 100644
index 00000000000..40c216271ed
--- /dev/null
+++ b/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1
@@ -0,0 +1 @@
+f73e2007b133fb699e517ef13b4952844f0150d8
diff --git a/solr/licenses/lucene-analysis-stempel-9.7.0.jar.sha1 b/solr/licenses/lucene-analysis-stempel-9.7.0.jar.sha1
deleted file mode 100644
index 409b414b486..00000000000
--- a/solr/licenses/lucene-analysis-stempel-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d23b1f05b471e05d0d6068b3ece7c8c65672eae7
diff --git a/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1
new file mode 100644
index 00000000000..08c368f78ac
--- /dev/null
+++ b/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1
@@ -0,0 +1 @@
+2c09cbc021a8f81a01600a1d2a999361e70f7aed
diff --git a/solr/licenses/lucene-backward-codecs-9.7.0.jar.sha1 b/solr/licenses/lucene-backward-codecs-9.7.0.jar.sha1
deleted file mode 100644
index f186a6837fc..00000000000
--- a/solr/licenses/lucene-backward-codecs-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6389463bfbfcf902c8d31d12e9513a6818ac9d5e
diff --git a/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1 b/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1
new file mode 100644
index 00000000000..bd8949e70af
--- /dev/null
+++ b/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1
@@ -0,0 +1 @@
+e98fb408028f40170e6d87c16422bfdc0bb2e392
diff --git a/solr/licenses/lucene-classification-9.7.0.jar.sha1 b/solr/licenses/lucene-classification-9.7.0.jar.sha1
deleted file mode 100644
index 7ed14dfe1a7..00000000000
--- a/solr/licenses/lucene-classification-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-4e5eadd2126228e0c64ad5b6e5858ab9727a4356
diff --git a/solr/licenses/lucene-classification-9.8.0.jar.sha1 b/solr/licenses/lucene-classification-9.8.0.jar.sha1
new file mode 100644
index 00000000000..60037652b8f
--- /dev/null
+++ b/solr/licenses/lucene-classification-9.8.0.jar.sha1
@@ -0,0 +1 @@
+a9ba5a08bb0e34aba034b9411c33a5a977e5a571
diff --git a/solr/licenses/lucene-codecs-9.7.0.jar.sha1 b/solr/licenses/lucene-codecs-9.7.0.jar.sha1
deleted file mode 100644
index 12fdb9869ca..00000000000
--- a/solr/licenses/lucene-codecs-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce18930d286e29c9f78f594c26cd5653ef3fe83e
diff --git a/solr/licenses/lucene-codecs-9.8.0.jar.sha1 b/solr/licenses/lucene-codecs-9.8.0.jar.sha1
new file mode 100644
index 00000000000..c01ff967edd
--- /dev/null
+++ b/solr/licenses/lucene-codecs-9.8.0.jar.sha1
@@ -0,0 +1 @@
+5661a90424b164551302a14d946e5cf35d90be72
diff --git a/solr/licenses/lucene-core-9.7.0.jar.sha1 b/solr/licenses/lucene-core-9.7.0.jar.sha1
deleted file mode 100644
index e524210f516..00000000000
--- a/solr/licenses/lucene-core-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ad391210ffd806931334be9670a35af00c56f959
diff --git a/solr/licenses/lucene-core-9.8.0.jar.sha1 b/solr/licenses/lucene-core-9.8.0.jar.sha1
new file mode 100644
index 00000000000..1c357709b86
--- /dev/null
+++ b/solr/licenses/lucene-core-9.8.0.jar.sha1
@@ -0,0 +1 @@
+5e8421c5f8573bcf22e9265fc7e19469545a775a
diff --git a/solr/licenses/lucene-expressions-9.7.0.jar.sha1 b/solr/licenses/lucene-expressions-9.7.0.jar.sha1
deleted file mode 100644
index df99d15fd55..00000000000
--- a/solr/licenses/lucene-expressions-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-297e1cfade4ef71466cc9d4f361d81807c8dc4c8
diff --git a/solr/licenses/lucene-expressions-9.8.0.jar.sha1 b/solr/licenses/lucene-expressions-9.8.0.jar.sha1
new file mode 100644
index 00000000000..2b13fab40dc
--- /dev/null
+++ b/solr/licenses/lucene-expressions-9.8.0.jar.sha1
@@ -0,0 +1 @@
+7725476acfcb9bdfeff1b813ce15c39c6b857dc2
diff --git a/solr/licenses/lucene-grouping-9.7.0.jar.sha1 b/solr/licenses/lucene-grouping-9.7.0.jar.sha1
deleted file mode 100644
index 81519bec541..00000000000
--- a/solr/licenses/lucene-grouping-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8e6f0c229f4861be641047c33b05067176e4279c
diff --git a/solr/licenses/lucene-grouping-9.8.0.jar.sha1 b/solr/licenses/lucene-grouping-9.8.0.jar.sha1
new file mode 100644
index 00000000000..c67fb0ff341
--- /dev/null
+++ b/solr/licenses/lucene-grouping-9.8.0.jar.sha1
@@ -0,0 +1 @@
+d39184518351178c404ed9669fc6cb6111f2288d
diff --git a/solr/licenses/lucene-highlighter-9.7.0.jar.sha1 b/solr/licenses/lucene-highlighter-9.7.0.jar.sha1
deleted file mode 100644
index 31744c10d96..00000000000
--- a/solr/licenses/lucene-highlighter-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-facb7c7ee0f75ed457a2d98f10d6430e25a53691
diff --git a/solr/licenses/lucene-highlighter-9.8.0.jar.sha1 b/solr/licenses/lucene-highlighter-9.8.0.jar.sha1
new file mode 100644
index 00000000000..c1a7f60dc79
--- /dev/null
+++ b/solr/licenses/lucene-highlighter-9.8.0.jar.sha1
@@ -0,0 +1 @@
+1ac38c8278dbd63dfab30744a41dd955a415a31c
diff --git a/solr/licenses/lucene-join-9.7.0.jar.sha1 b/solr/licenses/lucene-join-9.7.0.jar.sha1
deleted file mode 100644
index e9134ce0f3e..00000000000
--- a/solr/licenses/lucene-join-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d041bdc0947a14223cf68357407ee18b21027587
diff --git a/solr/licenses/lucene-join-9.8.0.jar.sha1 b/solr/licenses/lucene-join-9.8.0.jar.sha1
new file mode 100644
index 00000000000..842065e6321
--- /dev/null
+++ b/solr/licenses/lucene-join-9.8.0.jar.sha1
@@ -0,0 +1 @@
+3d64fc57bb6e718d906413a9f73c713e6d4d8bb0
diff --git a/solr/licenses/lucene-memory-9.7.0.jar.sha1 b/solr/licenses/lucene-memory-9.7.0.jar.sha1
deleted file mode 100644
index 9ac3c50a4c9..00000000000
--- a/solr/licenses/lucene-memory-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0fade51ee353e15ddbbc45262aafe6f99ed020f1
diff --git a/solr/licenses/lucene-memory-9.8.0.jar.sha1 b/solr/licenses/lucene-memory-9.8.0.jar.sha1
new file mode 100644
index 00000000000..375f8028682
--- /dev/null
+++ b/solr/licenses/lucene-memory-9.8.0.jar.sha1
@@ -0,0 +1 @@
+5283ac71d6ccecb5e00c7b52df2faec012f2625a
diff --git a/solr/licenses/lucene-misc-9.7.0.jar.sha1 b/solr/licenses/lucene-misc-9.7.0.jar.sha1
deleted file mode 100644
index 9df2fb89f24..00000000000
--- a/solr/licenses/lucene-misc-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7fcf451e2376526c3a027958812866cc5b0ff13f
diff --git a/solr/licenses/lucene-misc-9.8.0.jar.sha1 b/solr/licenses/lucene-misc-9.8.0.jar.sha1
new file mode 100644
index 00000000000..3e2022b60e4
--- /dev/null
+++ b/solr/licenses/lucene-misc-9.8.0.jar.sha1
@@ -0,0 +1 @@
+9a57b049cf51a5e9c9c1909c420f645f1b6f9a54
diff --git a/solr/licenses/lucene-queries-9.7.0.jar.sha1 b/solr/licenses/lucene-queries-9.7.0.jar.sha1
deleted file mode 100644
index 80c638e986c..00000000000
--- a/solr/licenses/lucene-queries-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-126989d4622419aa06fcbf3a342e859cab8c8799
diff --git a/solr/licenses/lucene-queries-9.8.0.jar.sha1 b/solr/licenses/lucene-queries-9.8.0.jar.sha1
new file mode 100644
index 00000000000..75cdfee9f96
--- /dev/null
+++ b/solr/licenses/lucene-queries-9.8.0.jar.sha1
@@ -0,0 +1 @@
+628db4ef46f1c6a05145bdac1d1bc4ace6341b13
diff --git a/solr/licenses/lucene-queryparser-9.7.0.jar.sha1 b/solr/licenses/lucene-queryparser-9.7.0.jar.sha1
deleted file mode 100644
index 277242ad56c..00000000000
--- a/solr/licenses/lucene-queryparser-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6e77bde908ff698354e4a2149e6dd4658b56d7b0
diff --git a/solr/licenses/lucene-queryparser-9.8.0.jar.sha1 b/solr/licenses/lucene-queryparser-9.8.0.jar.sha1
new file mode 100644
index 00000000000..865bd1783cd
--- /dev/null
+++ b/solr/licenses/lucene-queryparser-9.8.0.jar.sha1
@@ -0,0 +1 @@
+982faf2bfa55542bf57fbadef54c19ac00f57cae
diff --git a/solr/licenses/lucene-sandbox-9.7.0.jar.sha1 b/solr/licenses/lucene-sandbox-9.7.0.jar.sha1
deleted file mode 100644
index 60ad0045f4d..00000000000
--- a/solr/licenses/lucene-sandbox-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9f3e8e1947f2f1c5784132444af51a060ff0b4bf
diff --git a/solr/licenses/lucene-sandbox-9.8.0.jar.sha1 b/solr/licenses/lucene-sandbox-9.8.0.jar.sha1
new file mode 100644
index 00000000000..5e95a9d52e1
--- /dev/null
+++ b/solr/licenses/lucene-sandbox-9.8.0.jar.sha1
@@ -0,0 +1 @@
+06493dbd14d02537716822254866a94458f4d842
diff --git a/solr/licenses/lucene-spatial-extras-9.7.0.jar.sha1 b/solr/licenses/lucene-spatial-extras-9.7.0.jar.sha1
deleted file mode 100644
index 5a4ee73e3ee..00000000000
--- a/solr/licenses/lucene-spatial-extras-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01b0bc7a407d8c35a70a1adf7966bb3e7caae928
diff --git a/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1 b/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1
new file mode 100644
index 00000000000..54f649ad950
--- /dev/null
+++ b/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1
@@ -0,0 +1 @@
+9d9a731822ad6eefa1ba288a0c158d478522f165
diff --git a/solr/licenses/lucene-spatial3d-9.7.0.jar.sha1 b/solr/licenses/lucene-spatial3d-9.7.0.jar.sha1
deleted file mode 100644
index dfa1e68bbf4..00000000000
--- a/solr/licenses/lucene-spatial3d-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7c6b1b6e0a70c9cd177371e648648c2f896742a2
diff --git a/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1 b/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1
new file mode 100644
index 00000000000..f29a79e5e9f
--- /dev/null
+++ b/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1
@@ -0,0 +1 @@
+ce752a52b2d4eac90633c7df7982e29504f99e76
diff --git a/solr/licenses/lucene-suggest-9.7.0.jar.sha1 b/solr/licenses/lucene-suggest-9.7.0.jar.sha1
deleted file mode 100644
index a1661406108..00000000000
--- a/solr/licenses/lucene-suggest-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5c37fd9a5d71dc87fe1cd4c18ff295ec8cfac170
diff --git a/solr/licenses/lucene-suggest-9.8.0.jar.sha1 b/solr/licenses/lucene-suggest-9.8.0.jar.sha1
new file mode 100644
index 00000000000..25ba9a373ad
--- /dev/null
+++ b/solr/licenses/lucene-suggest-9.8.0.jar.sha1
@@ -0,0 +1 @@
+f977f96f2093b7fddea6b67caa2e1c5b10edebf6
diff --git a/solr/licenses/lucene-test-framework-9.7.0.jar.sha1 b/solr/licenses/lucene-test-framework-9.7.0.jar.sha1
deleted file mode 100644
index e4c93a23107..00000000000
--- a/solr/licenses/lucene-test-framework-9.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c9339d7fdb424940ab437134f06b9f64937d45e2
diff --git a/solr/licenses/lucene-test-framework-9.8.0.jar.sha1 b/solr/licenses/lucene-test-framework-9.8.0.jar.sha1
new file mode 100644
index 00000000000..29315f64529
--- /dev/null
+++ b/solr/licenses/lucene-test-framework-9.8.0.jar.sha1
@@ -0,0 +1 @@
+44903631a74e9cf5551452f905ab8a5b0652f1a5
diff --git a/solr/server/solr/configsets/_default/conf/solrconfig.xml b/solr/server/solr/configsets/_default/conf/solrconfig.xml
index ecd3693f642..d68a091f163 100644
--- a/solr/server/solr/configsets/_default/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/_default/conf/solrconfig.xml
@@ -35,7 +35,7 @@
        that you fully re-index after changing this setting as it can
        affect both how text is indexed and queried.
   -->
-  <luceneMatchVersion>9.7</luceneMatchVersion>
+  <luceneMatchVersion>9.8</luceneMatchVersion>
 
   <!-- <lib/> directives can be used to instruct Solr to load any Jars
        identified and use them to resolve any "plugins" specified in
diff --git a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
index 2fd3d0ae857..9c0aa25d52c 100644
--- a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
@@ -35,7 +35,7 @@
        that you fully re-index after changing this setting as it can
        affect both how text is indexed and queried.
   -->
-  <luceneMatchVersion>9.7</luceneMatchVersion>
+  <luceneMatchVersion>9.8</luceneMatchVersion>
 
   <!-- <lib/> directives can be used to instruct Solr to load any Jars
        identified and use them to resolve any "plugins" specified in
diff --git a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
index 978e69f8bf0..f686ff1f549 100644
--- a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
+++ b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
@@ -101,6 +101,9 @@ To disable the always-on trace generation set the system property `solr.alwaysOn
 === Learning To Rank
 * The FieldValueFeature class now always uses DocValues when docValues=true is set. A LegacyFieldValueFeature class provides the prior behaviour of not using DocValues when the docValues=true and stored=true field attributes are both set.
 
+=== Other
+* From Solr 9.4 using Lucene 9.8 onwards `DelegatingCollector.finish` clashes with the super class's `LeafCollector.finish` method. Any custom component extending the `DelegatingCollector` needs to rename the `finish` method to `complete` to follow Solr's implementation.
+
 == Solr 9.3
 === Binary Releases
 * Solr now comes with two xref:deployment-guide:installing-solr.adoc#available-solr-packages[binary releases] and xref:deployment-guide:solr-in-docker.adoc#available-images[docker images], **full** and **slim**.
diff --git a/versions.lock b/versions.lock
index fc164e8e3bd..d9a2e91973e 100644
--- a/versions.lock
+++ b/versions.lock
@@ -213,32 +213,32 @@ org.apache.logging.log4j:log4j-jul:2.20.0 (1 constraints: 3605333b)
 org.apache.logging.log4j:log4j-layout-template-json:2.20.0 (1 constraints: 3605333b)
 org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0 (1 constraints: 3605333b)
 org.apache.logging.log4j:log4j-web:2.20.0 (1 constraints: 3605333b)
-org.apache.lucene:lucene-analysis-common:9.7.0 (10 constraints: f29eac6b)
-org.apache.lucene:lucene-analysis-icu:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-kuromoji:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-morfologik:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-nori:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-opennlp:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-phonetic:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-smartcn:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-analysis-stempel:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-backward-codecs:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-classification:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-codecs:9.7.0 (3 constraints: a8253445)
-org.apache.lucene:lucene-core:9.7.0 (26 constraints: 49905bd5)
-org.apache.lucene:lucene-expressions:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-grouping:9.7.0 (2 constraints: ea1590e4)
-org.apache.lucene:lucene-highlighter:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-join:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-memory:9.7.0 (1 constraints: 9c0fb483)
-org.apache.lucene:lucene-misc:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-queries:9.7.0 (6 constraints: c651867e)
-org.apache.lucene:lucene-queryparser:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-sandbox:9.7.0 (1 constraints: d00f2d87)
-org.apache.lucene:lucene-spatial-extras:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-spatial3d:9.7.0 (1 constraints: bf10bcb9)
-org.apache.lucene:lucene-suggest:9.7.0 (1 constraints: 12052d36)
-org.apache.lucene:lucene-test-framework:9.7.0 (1 constraints: 12052d36)
+org.apache.lucene:lucene-analysis-common:9.8.0 (10 constraints: fc9e4474)
+org.apache.lucene:lucene-analysis-icu:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-kuromoji:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-morfologik:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-nori:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-opennlp:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-phonetic:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-smartcn:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-analysis-stempel:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-backward-codecs:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-classification:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-codecs:9.8.0 (3 constraints: ab25ca45)
+org.apache.lucene:lucene-core:9.8.0 (26 constraints: 6390b70d)
+org.apache.lucene:lucene-expressions:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-grouping:9.8.0 (2 constraints: ec15c6e4)
+org.apache.lucene:lucene-highlighter:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-join:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-memory:9.8.0 (1 constraints: 9d0fb783)
+org.apache.lucene:lucene-misc:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-queries:9.8.0 (6 constraints: cc512481)
+org.apache.lucene:lucene-queryparser:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-sandbox:9.8.0 (1 constraints: d10f3087)
+org.apache.lucene:lucene-spatial-extras:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-spatial3d:9.8.0 (1 constraints: c010bfb9)
+org.apache.lucene:lucene-suggest:9.8.0 (1 constraints: 13053036)
+org.apache.lucene:lucene-test-framework:9.8.0 (1 constraints: 13053036)
 org.apache.opennlp:opennlp-tools:1.9.4 (2 constraints: f91d5c6d)
 org.apache.pdfbox:fontbox:2.0.26 (1 constraints: 180b72d8)
 org.apache.pdfbox:jbig2-imageio:3.0.4 (1 constraints: 5e0cef01)
diff --git a/versions.props b/versions.props
index cb20ce4a698..31aa8c1e4df 100644
--- a/versions.props
+++ b/versions.props
@@ -49,7 +49,7 @@ org.apache.httpcomponents:httpcore=4.4.16
 org.apache.httpcomponents:httpmime=4.5.14
 org.apache.kerby:*=1.0.1
 org.apache.logging.log4j:*=2.20.0
-org.apache.lucene:*=9.7.0
+org.apache.lucene:*=9.8.0
 org.apache.tika:*=1.28.5
 org.apache.tomcat:annotations-api=6.0.53
 org.apache.zookeeper:*=3.9.0