SOLR-17097: Upgrade Solr to use Lucene 9.9.2 (#2176)


Co-authored-by: Nazerke Seidan <nseidan@Nazerkes-MacBook-Pro.local>
Co-authored-by: Christine Poerschke <cpoerschke@apache.org>
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 2e403f2..1ef6e91 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -212,6 +212,8 @@
 
 * SOLR-17089: Upgrade Jersey to 3.1.5 (Jason Gerlowski)
 
+* SOLR-17097: Upgrade Lucene to 9.9.2 (Nazerke Seidan, Christine Poerschke, Pierre Salagnac)
+
 Other Changes
 ---------------------
 * SOLR-17024: Remove support for the long-defunct "collectionDefaults" clusterprops key (Jason Gerlowski)
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 0197a6b..4fb38b8 100644
--- a/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
@@ -26,9 +26,9 @@
 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.codecs.lucene99.Lucene99Codec;
+import org.apache.lucene.codecs.lucene99.Lucene99Codec.Mode;
+import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.solr.common.SolrException;
@@ -97,7 +97,7 @@
       log.debug("Using default compressionMode: {}", compressionMode);
     }
     codec =
-        new Lucene95Codec(compressionMode) {
+        new Lucene99Codec(compressionMode) {
           @Override
           public PostingsFormat getPostingsFormatForField(String field) {
             final SchemaField schemaField = core.getLatestSchema().getFieldOrNull(field);
@@ -132,7 +132,7 @@
               if (DenseVectorField.HNSW_ALGORITHM.equals(knnAlgorithm)) {
                 int maxConn = vectorType.getHnswMaxConn();
                 int beamWidth = vectorType.getHnswBeamWidth();
-                var delegate = new Lucene95HnswVectorsFormat(maxConn, beamWidth);
+                var delegate = new Lucene99HnswVectorsFormat(maxConn, beamWidth);
                 return new SolrDelegatingKnnVectorsFormat(delegate, vectorType.getDimension());
               } else {
                 throw new SolrException(
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index e8457df..dc74c4d 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -42,6 +42,7 @@
 import org.apache.lucene.search.FuzzyTermsEnum;
 import org.apache.lucene.search.LeafFieldComparator;
 import org.apache.lucene.search.MatchNoDocsQuery;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.Scorable;
 import org.apache.lucene.search.Sort;
@@ -497,7 +498,12 @@
           // :TODO: would be simpler to always serialize every position of SortField[]
           if (type == SortField.Type.SCORE || type == SortField.Type.DOC) continue;
 
-          FieldComparator<?> comparator = sortField.getComparator(1, true);
+          FieldComparator<?> comparator =
+              sortField.getComparator(
+                  1,
+                  schemaFields.size() > 1
+                      ? Pruning.GREATER_THAN
+                      : Pruning.GREATER_THAN_OR_EQUAL_TO);
           LeafFieldComparator leafComparator = null;
           Object[] vals = new Object[nDocs];
 
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
index 8407b45..c7bef72 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
@@ -55,6 +55,7 @@
 import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.FieldComparatorSource;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SimpleFieldComparator;
 import org.apache.lucene.search.Sort;
@@ -1350,7 +1351,7 @@
 
     @Override
     public FieldComparator<Integer> newComparator(
-        String fieldName, final int numHits, boolean enableSkipping, boolean reversed) {
+        String fieldName, final int numHits, Pruning pruning, boolean reversed) {
       return new SimpleFieldComparator<>() {
         final int[] values = new int[numHits];
         int bottomVal;
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java b/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
index 1a8991a..d06e71d 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
@@ -26,6 +26,7 @@
 import java.util.Objects;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.util.PriorityQueue;
 import org.apache.solr.common.SolrException;
@@ -156,7 +157,9 @@
 
   Comparator<ShardDoc> comparatorFieldComparator(SortField sortField) {
     @SuppressWarnings({"rawtypes"})
-    final FieldComparator fieldComparator = sortField.getComparator(0, true);
+    final FieldComparator fieldComparator =
+        sortField.getComparator(
+            0, fieldNames.size() > 1 ? Pruning.GREATER_THAN : Pruning.GREATER_THAN_OR_EQUAL_TO);
     return new ShardComparator(sortField) {
       // Since the PriorityQueue keeps the biggest elements by default,
       // we need to reverse the field compare ordering so that the
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 85084f5..f8fffe9 100644
--- a/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
+++ b/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
@@ -97,7 +97,7 @@
     in = reader;
     in.registerParentReader(this);
     if (reader.leaves().isEmpty()) {
-      metaData = new LeafMetaData(Version.LATEST.major, Version.LATEST, null);
+      metaData = new LeafMetaData(Version.LATEST.major, Version.LATEST, null, false);
     } else {
       Version minVersion = Version.LATEST;
       for (LeafReaderContext leafReaderContext : reader.leaves()) {
@@ -109,9 +109,13 @@
           minVersion = leafVersion;
         }
       }
-      int createdVersionMajor =
-          reader.leaves().get(0).reader().getMetaData().getCreatedVersionMajor();
-      metaData = new LeafMetaData(createdVersionMajor, minVersion, null);
+      LeafMetaData leafMetaData = reader.leaves().get(0).reader().getMetaData();
+      metaData =
+          new LeafMetaData(
+              leafMetaData.getCreatedVersionMajor(),
+              minVersion,
+              leafMetaData.getSort(),
+              leafMetaData.hasBlocks());
     }
     fieldInfos = FieldInfos.getMergedFieldInfos(in);
   }
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 9581d10..5d5994a 100644
--- a/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
+++ b/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
@@ -17,8 +17,8 @@
 package org.apache.solr.schema;
 
 import static java.util.Optional.ofNullable;
-import static org.apache.lucene.codecs.lucene95.Lucene95HnswVectorsFormat.DEFAULT_BEAM_WIDTH;
-import static org.apache.lucene.codecs.lucene95.Lucene95HnswVectorsFormat.DEFAULT_MAX_CONN;
+import static org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat.DEFAULT_BEAM_WIDTH;
+import static org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat.DEFAULT_MAX_CONN;
 
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
diff --git a/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java b/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java
index b6e3193..11e2d73 100644
--- a/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java
+++ b/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java
@@ -37,6 +37,7 @@
 import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.LeafFieldComparator;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.spatial.SpatialStrategy;
@@ -270,7 +271,7 @@
 
           @SuppressWarnings("unchecked")
           final FieldComparator<Double> comparator =
-              (FieldComparator<Double>) getSortField(false).getComparator(1, false);
+              (FieldComparator<Double>) getSortField(false).getComparator(1, Pruning.NONE);
 
           final LeafFieldComparator leafComparator = comparator.getLeafComparator(ctx);
           final double mult = multiplier; // so it's a local field
diff --git a/solr/core/src/java/org/apache/solr/schema/RandomSortField.java b/solr/core/src/java/org/apache/solr/schema/RandomSortField.java
index 517b34d..1330832 100644
--- a/solr/core/src/java/org/apache/solr/schema/RandomSortField.java
+++ b/solr/core/src/java/org/apache/solr/schema/RandomSortField.java
@@ -27,6 +27,7 @@
 import org.apache.lucene.queries.function.docvalues.IntDocValues;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.FieldComparatorSource;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.SimpleFieldComparator;
 import org.apache.lucene.search.SortField;
 import org.apache.solr.response.TextResponseWriter;
@@ -112,7 +113,7 @@
       new FieldComparatorSource() {
         @Override
         public FieldComparator<Integer> newComparator(
-            final String fieldname, final int numHits, boolean enableSkipping, boolean reversed) {
+            final String fieldname, final int numHits, Pruning pruning, boolean reversed) {
           return new SimpleFieldComparator<>() {
             int seed;
             private final int[] values = new int[numHits];
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 c64bd4b..9a3b199 100644
--- a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
@@ -55,6 +55,7 @@
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.LeafFieldComparator;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryVisitor;
 import org.apache.lucene.search.Scorable;
@@ -3583,7 +3584,13 @@
       for (int clause = 0; clause < numClauses; clause++) {
         SortField sf = sorts[clause];
         // we only need one slot for every comparator
-        fieldComparators[clause] = sf.getComparator(1, clause == 0);
+        fieldComparators[clause] =
+            sf.getComparator(
+                1,
+                clause == 0
+                    ? (numClauses > 1 ? Pruning.GREATER_THAN : Pruning.GREATER_THAN_OR_EQUAL_TO)
+                    : Pruning.NONE);
+
         reverseMul[clause] = sf.getReverse() ? -1 : 1;
       }
       groupHeadValues = new Object[initNumGroups][];
diff --git a/solr/core/src/java/org/apache/solr/search/join/ChildFieldValueSourceParser.java b/solr/core/src/java/org/apache/solr/search/join/ChildFieldValueSourceParser.java
index e4af1ad0..24d2520 100644
--- a/solr/core/src/java/org/apache/solr/search/join/ChildFieldValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/join/ChildFieldValueSourceParser.java
@@ -25,6 +25,7 @@
 import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.LeafFieldComparator;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.SortField.Type;
@@ -124,8 +125,8 @@
           childField.getName(), type, reverse, parentFilter, childFilter) {
         @SuppressWarnings("unchecked")
         @Override
-        public FieldComparator<?> getComparator(int numHits, boolean enableSkipping) {
-          final FieldComparator<?> comparator = super.getComparator(numHits, enableSkipping);
+        public FieldComparator<?> getComparator(int numHits, Pruning pruning) {
+          final FieldComparator<?> comparator = super.getComparator(numHits, pruning);
           return type == Type.STRING
               ? new BytesToStringComparator((FieldComparator<BytesRef>) comparator)
               : comparator;
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema_codec.xml b/solr/core/src/test-files/solr/collection1/conf/schema_codec.xml
index 6f2f04a..a6d0a8e 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema_codec.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema_codec.xml
@@ -20,7 +20,7 @@
        as a way to vet that the configuration actually matters.
   -->
   <fieldType name="string_direct" class="solr.StrField" postingsFormat="Direct" docValuesFormat="Asserting" />
-  <fieldType name="string_standard" class="solr.StrField" postingsFormat="Lucene90"/>
+  <fieldType name="string_standard" class="solr.StrField" postingsFormat="Lucene99"/>
 
   <fieldType name="string_disk" class="solr.StrField" />
 
diff --git a/solr/core/src/test/org/apache/solr/core/TestCodecSupport.java b/solr/core/src/test/org/apache/solr/core/TestCodecSupport.java
index 6681af1..8fd6061 100644
--- a/solr/core/src/test/org/apache/solr/core/TestCodecSupport.java
+++ b/solr/core/src/test/org/apache/solr/core/TestCodecSupport.java
@@ -21,7 +21,7 @@
 import java.io.IOException;
 import java.util.Map;
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.lucene95.Lucene95Codec.Mode;
+import org.apache.lucene.codecs.lucene99.Lucene99Codec.Mode;
 import org.apache.lucene.codecs.perfield.PerFieldDocValuesFormat;
 import org.apache.lucene.codecs.perfield.PerFieldPostingsFormat;
 import org.apache.lucene.index.SegmentInfo;
diff --git a/solr/core/src/test/org/apache/solr/search/RankQueryTestPlugin.java b/solr/core/src/test/org/apache/solr/search/RankQueryTestPlugin.java
index 7b3f774..b11728e 100644
--- a/solr/core/src/test/org/apache/solr/search/RankQueryTestPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/RankQueryTestPlugin.java
@@ -34,6 +34,7 @@
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.LeafCollector;
 import org.apache.lucene.search.LeafFieldComparator;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryVisitor;
 import org.apache.lucene.search.Scorable;
@@ -447,7 +448,7 @@
             }
 
             if (comparator == null) {
-              comparator = sortField.getComparator(1, true);
+              comparator = sortField.getComparator(1, Pruning.NONE);
               leafComparator = comparator.getLeafComparator(currentLeaf);
             }
 
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 60a3d8c..901a188 100644
--- a/solr/core/src/test/org/apache/solr/search/TestDocSet.java
+++ b/solr/core/src/test/org/apache/solr/search/TestDocSet.java
@@ -401,7 +401,7 @@
 
       @Override
       public LeafMetaData getMetaData() {
-        return new LeafMetaData(Version.LATEST.major, Version.LATEST, null);
+        return new LeafMetaData(Version.LATEST.major, Version.LATEST, null, true);
       }
 
       @Override
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 9dfd855..56b6566 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
@@ -247,9 +247,16 @@
       SchemaField foo_dt = h.getCore().getLatestSchema().getField("foo_dt");
       String expected = "foo_dt:2013-09-11T00:00:00Z";
       if (foo_dt.getType().isPointField()) {
-        expected = "(foo_dt:[1378857600000 TO 1378857600000])";
+        expected = "foo_dt:[1378857600000 TO 1378857600000]";
         if (foo_dt.hasDocValues() && foo_dt.indexed()) {
-          expected = "IndexOrDocValuesQuery" + expected;
+          expected =
+              "IndexOrDocValuesQuery(IndexOrDocValuesQuery(indexQuery="
+                  + expected
+                  + ", dvQuery="
+                  + expected
+                  + "))";
+        } else {
+          expected = "(" + expected + ")";
         }
       }
       assertJQ(
diff --git a/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1
deleted file mode 100644
index 6b9555a..0000000
--- a/solr/licenses/lucene-analysis-common-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-36f0363325ca7bf62c180160d1ed5165c7c37795
diff --git a/solr/licenses/lucene-analysis-common-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-common-9.9.2.jar.sha1
new file mode 100644
index 0000000..7534070
--- /dev/null
+++ b/solr/licenses/lucene-analysis-common-9.9.2.jar.sha1
@@ -0,0 +1 @@
+2a4712ee9d87e0f9942a81195dbd5223dbeaa541
diff --git a/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1
deleted file mode 100644
index 512bf46..0000000
--- a/solr/licenses/lucene-analysis-icu-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7133d34e92770f59eb28686f4d511b9f3f32e970
diff --git a/solr/licenses/lucene-analysis-icu-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-icu-9.9.2.jar.sha1
new file mode 100644
index 0000000..cfa86d6
--- /dev/null
+++ b/solr/licenses/lucene-analysis-icu-9.9.2.jar.sha1
@@ -0,0 +1 @@
+f7e549fdac07140f4cd379a0f517c38434165e95
diff --git a/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1
deleted file mode 100644
index 4d7de12..0000000
--- a/solr/licenses/lucene-analysis-kuromoji-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-be44282e1f6b91a0650fcceb558053d6bdd4863d
diff --git a/solr/licenses/lucene-analysis-kuromoji-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-kuromoji-9.9.2.jar.sha1
new file mode 100644
index 0000000..0b00dab
--- /dev/null
+++ b/solr/licenses/lucene-analysis-kuromoji-9.9.2.jar.sha1
@@ -0,0 +1 @@
+eb19738fd3ca85071fef96978a056a7c94d8e793
diff --git a/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1
deleted file mode 100644
index db16493..0000000
--- a/solr/licenses/lucene-analysis-morfologik-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b054f2c7b11fc7c5601b4c3cdf18aa7508612898
diff --git a/solr/licenses/lucene-analysis-morfologik-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-morfologik-9.9.2.jar.sha1
new file mode 100644
index 0000000..cb0a692
--- /dev/null
+++ b/solr/licenses/lucene-analysis-morfologik-9.9.2.jar.sha1
@@ -0,0 +1 @@
+9958d813d4cfdd890b4611c679ed36775480fa0d
diff --git a/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1
deleted file mode 100644
index cb1a7f7..0000000
--- a/solr/licenses/lucene-analysis-nori-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-bd1f80d33346f7e588685484ef29a304db5190e4
diff --git a/solr/licenses/lucene-analysis-nori-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-nori-9.9.2.jar.sha1
new file mode 100644
index 0000000..924982f
--- /dev/null
+++ b/solr/licenses/lucene-analysis-nori-9.9.2.jar.sha1
@@ -0,0 +1 @@
+7e83a83741155ececf9193a4f967e570e170236d
diff --git a/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1
deleted file mode 100644
index 92c8bd6..0000000
--- a/solr/licenses/lucene-analysis-opennlp-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f878344c9742c33a42dd06b51a0a2e73cb49f16c
diff --git a/solr/licenses/lucene-analysis-opennlp-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-opennlp-9.9.2.jar.sha1
new file mode 100644
index 0000000..2d31173
--- /dev/null
+++ b/solr/licenses/lucene-analysis-opennlp-9.9.2.jar.sha1
@@ -0,0 +1 @@
+1b8bd6cfa7f6c4562a48ff53d6aef0bbc13cd232
diff --git a/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1
deleted file mode 100644
index 8aa6dd9..0000000
--- a/solr/licenses/lucene-analysis-phonetic-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b9ffdc7a52d2087ecb03318ec06305b480cdfe82
diff --git a/solr/licenses/lucene-analysis-phonetic-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-phonetic-9.9.2.jar.sha1
new file mode 100644
index 0000000..ee77401
--- /dev/null
+++ b/solr/licenses/lucene-analysis-phonetic-9.9.2.jar.sha1
@@ -0,0 +1 @@
+dabdea96c7a6d00363b0093a580e7d783efa69a4
diff --git a/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1
deleted file mode 100644
index 40c2162..0000000
--- a/solr/licenses/lucene-analysis-smartcn-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f73e2007b133fb699e517ef13b4952844f0150d8
diff --git a/solr/licenses/lucene-analysis-smartcn-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-smartcn-9.9.2.jar.sha1
new file mode 100644
index 0000000..243aa7b
--- /dev/null
+++ b/solr/licenses/lucene-analysis-smartcn-9.9.2.jar.sha1
@@ -0,0 +1 @@
+fb551d9ae6a1bf12bc90a4d26dd8fa3eefac8cb9
diff --git a/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1 b/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1
deleted file mode 100644
index 08c368f..0000000
--- a/solr/licenses/lucene-analysis-stempel-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2c09cbc021a8f81a01600a1d2a999361e70f7aed
diff --git a/solr/licenses/lucene-analysis-stempel-9.9.2.jar.sha1 b/solr/licenses/lucene-analysis-stempel-9.9.2.jar.sha1
new file mode 100644
index 0000000..0ff52eb
--- /dev/null
+++ b/solr/licenses/lucene-analysis-stempel-9.9.2.jar.sha1
@@ -0,0 +1 @@
+0d495b478861b2d29e0a58d273ca0e6e755292e9
diff --git a/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1 b/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1
deleted file mode 100644
index bd8949e..0000000
--- a/solr/licenses/lucene-backward-codecs-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e98fb408028f40170e6d87c16422bfdc0bb2e392
diff --git a/solr/licenses/lucene-backward-codecs-9.9.2.jar.sha1 b/solr/licenses/lucene-backward-codecs-9.9.2.jar.sha1
new file mode 100644
index 0000000..7573768
--- /dev/null
+++ b/solr/licenses/lucene-backward-codecs-9.9.2.jar.sha1
@@ -0,0 +1 @@
+b53707366cf2891bb301f85a44c5108fc2d5d1b5
diff --git a/solr/licenses/lucene-classification-9.8.0.jar.sha1 b/solr/licenses/lucene-classification-9.8.0.jar.sha1
deleted file mode 100644
index 6003765..0000000
--- a/solr/licenses/lucene-classification-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a9ba5a08bb0e34aba034b9411c33a5a977e5a571
diff --git a/solr/licenses/lucene-classification-9.9.2.jar.sha1 b/solr/licenses/lucene-classification-9.9.2.jar.sha1
new file mode 100644
index 0000000..ab25a33
--- /dev/null
+++ b/solr/licenses/lucene-classification-9.9.2.jar.sha1
@@ -0,0 +1 @@
+7a46981131fdd014dfdb935e0155f69d13717a4c
diff --git a/solr/licenses/lucene-codecs-9.8.0.jar.sha1 b/solr/licenses/lucene-codecs-9.8.0.jar.sha1
deleted file mode 100644
index c01ff96..0000000
--- a/solr/licenses/lucene-codecs-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5661a90424b164551302a14d946e5cf35d90be72
diff --git a/solr/licenses/lucene-codecs-9.9.2.jar.sha1 b/solr/licenses/lucene-codecs-9.9.2.jar.sha1
new file mode 100644
index 0000000..f98d064
--- /dev/null
+++ b/solr/licenses/lucene-codecs-9.9.2.jar.sha1
@@ -0,0 +1 @@
+c97222927eebbdcc191a094c1881708eda4ffd83
diff --git a/solr/licenses/lucene-core-9.8.0.jar.sha1 b/solr/licenses/lucene-core-9.8.0.jar.sha1
deleted file mode 100644
index 1c35770..0000000
--- a/solr/licenses/lucene-core-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5e8421c5f8573bcf22e9265fc7e19469545a775a
diff --git a/solr/licenses/lucene-core-9.9.2.jar.sha1 b/solr/licenses/lucene-core-9.9.2.jar.sha1
new file mode 100644
index 0000000..0a4072d
--- /dev/null
+++ b/solr/licenses/lucene-core-9.9.2.jar.sha1
@@ -0,0 +1 @@
+7699f80220fc80b08413902560904623b88beb9f
diff --git a/solr/licenses/lucene-expressions-9.8.0.jar.sha1 b/solr/licenses/lucene-expressions-9.8.0.jar.sha1
deleted file mode 100644
index 2b13fab..0000000
--- a/solr/licenses/lucene-expressions-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7725476acfcb9bdfeff1b813ce15c39c6b857dc2
diff --git a/solr/licenses/lucene-expressions-9.9.2.jar.sha1 b/solr/licenses/lucene-expressions-9.9.2.jar.sha1
new file mode 100644
index 0000000..eeaf8f4
--- /dev/null
+++ b/solr/licenses/lucene-expressions-9.9.2.jar.sha1
@@ -0,0 +1 @@
+045df3828b6460c032a6551040e31ea432b0aad6
diff --git a/solr/licenses/lucene-grouping-9.8.0.jar.sha1 b/solr/licenses/lucene-grouping-9.8.0.jar.sha1
deleted file mode 100644
index c67fb0f..0000000
--- a/solr/licenses/lucene-grouping-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d39184518351178c404ed9669fc6cb6111f2288d
diff --git a/solr/licenses/lucene-grouping-9.9.2.jar.sha1 b/solr/licenses/lucene-grouping-9.9.2.jar.sha1
new file mode 100644
index 0000000..7081c91
--- /dev/null
+++ b/solr/licenses/lucene-grouping-9.9.2.jar.sha1
@@ -0,0 +1 @@
+72b6c47fd80933d259859d38325e3e020c8e017b
diff --git a/solr/licenses/lucene-highlighter-9.8.0.jar.sha1 b/solr/licenses/lucene-highlighter-9.8.0.jar.sha1
deleted file mode 100644
index c1a7f60..0000000
--- a/solr/licenses/lucene-highlighter-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1ac38c8278dbd63dfab30744a41dd955a415a31c
diff --git a/solr/licenses/lucene-highlighter-9.9.2.jar.sha1 b/solr/licenses/lucene-highlighter-9.9.2.jar.sha1
new file mode 100644
index 0000000..8568e0f
--- /dev/null
+++ b/solr/licenses/lucene-highlighter-9.9.2.jar.sha1
@@ -0,0 +1 @@
+0968d74d6794af65798819304f10ceb947080332
diff --git a/solr/licenses/lucene-join-9.8.0.jar.sha1 b/solr/licenses/lucene-join-9.8.0.jar.sha1
deleted file mode 100644
index 842065e6..0000000
--- a/solr/licenses/lucene-join-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3d64fc57bb6e718d906413a9f73c713e6d4d8bb0
diff --git a/solr/licenses/lucene-join-9.9.2.jar.sha1 b/solr/licenses/lucene-join-9.9.2.jar.sha1
new file mode 100644
index 0000000..34667da
--- /dev/null
+++ b/solr/licenses/lucene-join-9.9.2.jar.sha1
@@ -0,0 +1 @@
+902e4b65686e29c1489a7cdf43ed2ce3b7fe8ace
diff --git a/solr/licenses/lucene-memory-9.8.0.jar.sha1 b/solr/licenses/lucene-memory-9.8.0.jar.sha1
deleted file mode 100644
index 375f802..0000000
--- a/solr/licenses/lucene-memory-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5283ac71d6ccecb5e00c7b52df2faec012f2625a
diff --git a/solr/licenses/lucene-memory-9.9.2.jar.sha1 b/solr/licenses/lucene-memory-9.9.2.jar.sha1
new file mode 100644
index 0000000..46e380d
--- /dev/null
+++ b/solr/licenses/lucene-memory-9.9.2.jar.sha1
@@ -0,0 +1 @@
+08175beb4135c23e6918c822381cd51cd2e118a8
diff --git a/solr/licenses/lucene-misc-9.8.0.jar.sha1 b/solr/licenses/lucene-misc-9.8.0.jar.sha1
deleted file mode 100644
index 3e2022b..0000000
--- a/solr/licenses/lucene-misc-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9a57b049cf51a5e9c9c1909c420f645f1b6f9a54
diff --git a/solr/licenses/lucene-misc-9.9.2.jar.sha1 b/solr/licenses/lucene-misc-9.9.2.jar.sha1
new file mode 100644
index 0000000..67fc5f8
--- /dev/null
+++ b/solr/licenses/lucene-misc-9.9.2.jar.sha1
@@ -0,0 +1 @@
+39b015aa603db42b55f0833193bdfc75d38842ba
diff --git a/solr/licenses/lucene-queries-9.8.0.jar.sha1 b/solr/licenses/lucene-queries-9.8.0.jar.sha1
deleted file mode 100644
index 75cdfee..0000000
--- a/solr/licenses/lucene-queries-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-628db4ef46f1c6a05145bdac1d1bc4ace6341b13
diff --git a/solr/licenses/lucene-queries-9.9.2.jar.sha1 b/solr/licenses/lucene-queries-9.9.2.jar.sha1
new file mode 100644
index 0000000..be6fff5
--- /dev/null
+++ b/solr/licenses/lucene-queries-9.9.2.jar.sha1
@@ -0,0 +1 @@
+671252594e15280818f56d4b369bc48c0ab00dac
diff --git a/solr/licenses/lucene-queryparser-9.8.0.jar.sha1 b/solr/licenses/lucene-queryparser-9.8.0.jar.sha1
deleted file mode 100644
index 865bd17..0000000
--- a/solr/licenses/lucene-queryparser-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-982faf2bfa55542bf57fbadef54c19ac00f57cae
diff --git a/solr/licenses/lucene-queryparser-9.9.2.jar.sha1 b/solr/licenses/lucene-queryparser-9.9.2.jar.sha1
new file mode 100644
index 0000000..8b0136e
--- /dev/null
+++ b/solr/licenses/lucene-queryparser-9.9.2.jar.sha1
@@ -0,0 +1 @@
+7cf8dea63ab511ea9a322916198c3abd0402c8b2
diff --git a/solr/licenses/lucene-sandbox-9.8.0.jar.sha1 b/solr/licenses/lucene-sandbox-9.8.0.jar.sha1
deleted file mode 100644
index 5e95a9d..0000000
--- a/solr/licenses/lucene-sandbox-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-06493dbd14d02537716822254866a94458f4d842
diff --git a/solr/licenses/lucene-sandbox-9.9.2.jar.sha1 b/solr/licenses/lucene-sandbox-9.9.2.jar.sha1
new file mode 100644
index 0000000..9bdac74
--- /dev/null
+++ b/solr/licenses/lucene-sandbox-9.9.2.jar.sha1
@@ -0,0 +1 @@
+4e2bdc6a5b65dd15b78477cf2c49cf7b707ba757
diff --git a/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1 b/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1
deleted file mode 100644
index 54f649a..0000000
--- a/solr/licenses/lucene-spatial-extras-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-9d9a731822ad6eefa1ba288a0c158d478522f165
diff --git a/solr/licenses/lucene-spatial-extras-9.9.2.jar.sha1 b/solr/licenses/lucene-spatial-extras-9.9.2.jar.sha1
new file mode 100644
index 0000000..6ff99ed
--- /dev/null
+++ b/solr/licenses/lucene-spatial-extras-9.9.2.jar.sha1
@@ -0,0 +1 @@
+2693d4d4d3b9a0bf5b632ccbb01132eade1c4e14
diff --git a/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1 b/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1
deleted file mode 100644
index f29a79e..0000000
--- a/solr/licenses/lucene-spatial3d-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce752a52b2d4eac90633c7df7982e29504f99e76
diff --git a/solr/licenses/lucene-spatial3d-9.9.2.jar.sha1 b/solr/licenses/lucene-spatial3d-9.9.2.jar.sha1
new file mode 100644
index 0000000..3e18cb0
--- /dev/null
+++ b/solr/licenses/lucene-spatial3d-9.9.2.jar.sha1
@@ -0,0 +1 @@
+61866a44eafce499ebbc20bcb75c8b8a60a5449b
diff --git a/solr/licenses/lucene-suggest-9.8.0.jar.sha1 b/solr/licenses/lucene-suggest-9.8.0.jar.sha1
deleted file mode 100644
index 25ba9a3..0000000
--- a/solr/licenses/lucene-suggest-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f977f96f2093b7fddea6b67caa2e1c5b10edebf6
diff --git a/solr/licenses/lucene-suggest-9.9.2.jar.sha1 b/solr/licenses/lucene-suggest-9.9.2.jar.sha1
new file mode 100644
index 0000000..8489707
--- /dev/null
+++ b/solr/licenses/lucene-suggest-9.9.2.jar.sha1
@@ -0,0 +1 @@
+352ad5296f48a482e2b65bb7d5d6ba2977bb035e
diff --git a/solr/licenses/lucene-test-framework-9.8.0.jar.sha1 b/solr/licenses/lucene-test-framework-9.8.0.jar.sha1
deleted file mode 100644
index 29315f6..0000000
--- a/solr/licenses/lucene-test-framework-9.8.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-44903631a74e9cf5551452f905ab8a5b0652f1a5
diff --git a/solr/licenses/lucene-test-framework-9.9.2.jar.sha1 b/solr/licenses/lucene-test-framework-9.9.2.jar.sha1
new file mode 100644
index 0000000..947884e
--- /dev/null
+++ b/solr/licenses/lucene-test-framework-9.9.2.jar.sha1
@@ -0,0 +1 @@
+447d9a4b48af97d1bf9086ea463d5fec28bdd0de
diff --git a/solr/server/solr/configsets/_default/conf/solrconfig.xml b/solr/server/solr/configsets/_default/conf/solrconfig.xml
index a74f283..6b5c325 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.8</luceneMatchVersion>
+  <luceneMatchVersion>9.9</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 9c0aa25..f652e02 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.8</luceneMatchVersion>
+  <luceneMatchVersion>9.9</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/test-framework/src/java/org/apache/solr/schema/SortableBinaryField.java b/solr/test-framework/src/java/org/apache/solr/schema/SortableBinaryField.java
index 30589f0..b896961 100644
--- a/solr/test-framework/src/java/org/apache/solr/schema/SortableBinaryField.java
+++ b/solr/test-framework/src/java/org/apache/solr/schema/SortableBinaryField.java
@@ -24,6 +24,7 @@
 import org.apache.lucene.document.SortedSetDocValuesField;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.search.FieldComparatorSource;
+import org.apache.lucene.search.Pruning;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.comparators.TermOrdValComparator;
 import org.apache.lucene.util.BytesRef;
@@ -73,11 +74,11 @@
             public TermOrdValComparator newComparator(
                 final String fieldname,
                 final int numHits,
-                final boolean enableSkipping,
+                final Pruning pruning,
                 final boolean reversed) {
               final boolean sortMissingLast = false;
               return new TermOrdValComparator(
-                  numHits, fieldname, sortMissingLast, reversed, enableSkipping);
+                  numHits, fieldname, sortMissingLast, reversed, pruning);
             }
           },
           reverse);
diff --git a/versions.lock b/versions.lock
index 86472ed..dcad9da 100644
--- a/versions.lock
+++ b/versions.lock
@@ -209,33 +209,33 @@
 org.apache.logging.log4j:log4j-layout-template-json:2.21.0 (1 constraints: 3705363b)
 org.apache.logging.log4j:log4j-slf4j2-impl:2.21.0 (1 constraints: 3705363b)
 org.apache.logging.log4j:log4j-web:2.21.0 (1 constraints: 3705363b)
-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.lucene:lucene-analysis-common:9.9.2 (10 constraints: 1a9fe48d)
+org.apache.lucene:lucene-analysis-icu:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-kuromoji:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-morfologik:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-nori:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-opennlp:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-phonetic:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-smartcn:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-analysis-stempel:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-backward-codecs:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-classification:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-codecs:9.9.2 (3 constraints: b4258047)
+org.apache.lucene:lucene-core:9.9.2 (26 constraints: b19036b6)
+org.apache.lucene:lucene-expressions:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-grouping:9.9.2 (2 constraints: f21560e5)
+org.apache.lucene:lucene-highlighter:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-join:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-memory:9.9.2 (1 constraints: a00fbc83)
+org.apache.lucene:lucene-misc:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-queries:9.9.2 (6 constraints: de51e688)
+org.apache.lucene:lucene-queryparser:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-sandbox:9.9.2 (1 constraints: d40f3587)
+org.apache.lucene:lucene-spatial-extras:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-spatial3d:9.9.2 (1 constraints: c310c4b9)
+org.apache.lucene:lucene-suggest:9.9.2 (1 constraints: 16053536)
+org.apache.lucene:lucene-test-framework:9.9.2 (1 constraints: 16053536)
+org.apache.opennlp:opennlp-tools:1.9.4 (2 constraints: fc1dce6d)
 org.apache.pdfbox:fontbox:2.0.26 (1 constraints: 180b72d8)
 org.apache.pdfbox:jbig2-imageio:3.0.4 (1 constraints: 5e0cef01)
 org.apache.pdfbox:jempbox:1.8.16 (1 constraints: 970c910e)
diff --git a/versions.props b/versions.props
index 55a86aa..e918462 100644
--- a/versions.props
+++ b/versions.props
@@ -48,7 +48,7 @@
 org.apache.httpcomponents:httpmime=4.5.14
 org.apache.kerby:*=1.0.1
 org.apache.logging.log4j:*=2.21.0
-org.apache.lucene:*=9.8.0
+org.apache.lucene:*=9.9.2
 org.apache.tika:*=1.28.5
 org.apache.tomcat:annotations-api=6.0.53
 org.apache.zookeeper:*=3.9.1