Browse Source

Upgrade to lucene-9.4.0-snapshot-923a9f800ae (#89427)

Upgrade ES to a new Lucene snapshot:
Changes of interest:
- LUCENE-10592 Build HNSW Graph on indexing
- LUCENE-10678: Fix potential overflow when computing the partition point
- LUCENE-10633: Dynamic pruning for sorting on SORTED(_SET) fields
Mayya Sharipova 3 years ago
parent
commit
724b76f7b8

+ 1 - 1
build-tools-internal/version.properties

@@ -1,5 +1,5 @@
 elasticsearch     = 8.5.0
-lucene            = 9.3.0
+lucene            = 9.4.0-snapshot-923a9f800ae
 
 bundled_jdk_vendor = openjdk
 bundled_jdk = 18.0.2+9@f6ad4b4450fd4d298113270ec84f30ee

+ 2 - 2
docs/Versions.asciidoc

@@ -1,8 +1,8 @@
 
 include::{docs-root}/shared/versions/stack/{source_branch}.asciidoc[]
 
-:lucene_version:        9.3.0
-:lucene_version_path:   9_3_0
+:lucene_version:        9.4.0
+:lucene_version_path:   9_4_0
 :jdk:                   11.0.2
 :jdk_major:             11
 :build_type:            tar

+ 120 - 0
gradle/verification-metadata.xml

@@ -2446,121 +2446,241 @@
             <sha256 value="97467f6177be7ea1c64cf7cfbdad8f8c18d472a18950106d35138dd05010a754" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-common" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-common-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="163c5002f4a4115af1d83c785dac61f71d2173becaf0208fd98b110222a003d5" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-icu" version="9.3.0">
          <artifact name="lucene-analysis-icu-9.3.0.jar">
             <sha256 value="e3af1f650877bcc438e15ea2b12dfac4d3ac12c27105cd4b000d0916730f6a74" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-icu" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-icu-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="68b4b58a5f2de39cd648bfed567a6f346b1fb96299e1ad2d67e8379c4e58d947" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-kuromoji" version="9.3.0">
          <artifact name="lucene-analysis-kuromoji-9.3.0.jar">
             <sha256 value="75b63452e9fa9186e65db423967f3cbe8db2be277a28f11d91c99d8e91a05eee" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-kuromoji" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-kuromoji-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="2ba0b587532e884b45802788b5d3abc8249d43ade1039aa989114f4a2ec769a8" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-morfologik" version="9.3.0">
          <artifact name="lucene-analysis-morfologik-9.3.0.jar">
             <sha256 value="519e82cc50ddaa2f82b056261f971d6b01d710ff704d0ff3cd0e2d4784ed6c34" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-morfologik" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-morfologik-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="655a33e257e04717a510f52c3272d677b20d2167c9129ebfcc3ead72e638e2bb" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-nori" version="9.3.0">
          <artifact name="lucene-analysis-nori-9.3.0.jar">
             <sha256 value="6321eb622829507846ca66b6313e4ed9c0263295e2282eb15f6c994bb96d964a" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-nori" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-nori-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="94c16b6427fc71f3a87eb769d14f7e3f8b47bcf2786ef7bac29b5e05f88bc030" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-phonetic" version="9.3.0">
          <artifact name="lucene-analysis-phonetic-9.3.0.jar">
             <sha256 value="501ae24399112990cb26d4ab5f6b3a97d76a81a70a040955161f7c9f1e91ab1f" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-phonetic" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-phonetic-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="dfbb9b4b97bf14f4af78c61c471125fbff41711e8001e7d3ddb673523d44bd53" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-smartcn" version="9.3.0">
          <artifact name="lucene-analysis-smartcn-9.3.0.jar">
             <sha256 value="923ec58703d202afe99a12537a9f66a9e4ab6029f34c88ce6c6b641231bb5f9a" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-smartcn" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-smartcn-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="d16fac4cbcef6580f9e91d8158e622064ff0ac15e1c75a15a34c8c95d865be5d" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-analysis-stempel" version="9.3.0">
          <artifact name="lucene-analysis-stempel-9.3.0.jar">
             <sha256 value="42eb4ebf6f2342cca251bca2d913220879f6d953cf2266128124d9d53e9f2d70" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-analysis-stempel" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-analysis-stempel-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="4a2af32ae9b6c9efd25e319db1de3287d8f75b0970385fb3bd87d4bc59a9c978" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-backward-codecs" version="9.3.0">
          <artifact name="lucene-backward-codecs-9.3.0.jar">
             <sha256 value="be3f53127137300363863b6bb56a4a841ba110e5f203d7ac52ccd3422606e4ca" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-backward-codecs" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-backward-codecs-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="4995db3030fe62e7b081d1eb6719bf38545c657fbe589b804e87e637fd7b34eb" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-codecs" version="9.3.0">
          <artifact name="lucene-codecs-9.3.0.jar">
             <sha256 value="572f596cbb9c1720ab96a58439bf68ed3dc831df895dbdad55934937667cc8e8" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-codecs" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-codecs-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="d18983f59bb8bdc1bcfcd008341a067ccd689fbc16ae62de39df0cb1461c7be0" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-core" version="9.3.0">
          <artifact name="lucene-core-9.3.0.jar">
             <sha256 value="5036ce5083e2ef55d88b1f5cb0dc543bc697ac79bde49f4c93905e7fed1abfac" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-core" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-core-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="2f432706b869d80af1ad3e875ee329fb6085177c09bf11361a1823d04d3c9672" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-expressions" version="9.3.0">
          <artifact name="lucene-expressions-9.3.0.jar">
             <sha256 value="4e1a3b5646a0b2f00c2e386012ee12fe80e56438e77dcde474adfd7bfc36925c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-expressions" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-expressions-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="cf065e64a0706970657fe527b8ef181c4c73bda9e61ccb78f2139aacdf13f7fd" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-grouping" version="9.3.0">
          <artifact name="lucene-grouping-9.3.0.jar">
             <sha256 value="20792445a20268a7d0c1cc9cb774dd194ac416ba3a29bdd9d8050ae8503aac21" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-grouping" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-grouping-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="2a1b56f1f0079f61ecc01b1639db606de27c17e65e234cd74b0287d13e430d13" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-highlighter" version="9.3.0">
          <artifact name="lucene-highlighter-9.3.0.jar">
             <sha256 value="a352e3723fa7b9e27306da349ad15dec061fe8847db512cf5b0296f163d7f70f" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-highlighter" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-highlighter-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="09d0711c0af61fb16da50082b0bcabfe0dea4fe3e75f17a9a642d236c1161852" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-join" version="9.3.0">
          <artifact name="lucene-join-9.3.0.jar">
             <sha256 value="b7742f0b7c525005e14d01dfef0f03f06e532bc5bffd85aa868980338d0ea1f2" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-join" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-join-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="f7f05f17b16ee296aa536b6fec5a42afe07c1275295624fa736c14feb8649b51" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-memory" version="9.3.0">
          <artifact name="lucene-memory-9.3.0.jar">
             <sha256 value="722d60f852c00502c7d59df512df7a6002f5aa5ce1b3ca900e20fd1f47a53945" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-memory" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-memory-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="afc092c3a21d45e705492f258ceed389d3bcd5ef738c87e6dc98a730aae74002" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-misc" version="9.3.0">
          <artifact name="lucene-misc-9.3.0.jar">
             <sha256 value="16b60d35993b6d434d1977767e25296cd74607a49c131ef2710956f228fc4341" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-misc" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-misc-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="b31c545ad2f2ffd0f1faf90192866d61833ebe9a5c6b1a4cce326fc0e39672f2" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-queries" version="9.3.0">
          <artifact name="lucene-queries-9.3.0.jar">
             <sha256 value="7221ed2f88417320f94eb528d5e41fc30aaa6bcb59cab264f9304a470f140e52" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-queries" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-queries-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="9e1951759e51a9aa83cbbb90d3543cde20e0d8fc3967c459b93e404702d1cb4e" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-queryparser" version="9.3.0">
          <artifact name="lucene-queryparser-9.3.0.jar">
             <sha256 value="7ddd50b7e89a6e8ca67d0fc34cbaa644bc11a15155f91151e387ef1b104db779" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-queryparser" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-queryparser-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="cefd55ab0bb589eac2c5fe306bb96506b4c6673d7b55e5f0743a18e0bdf73f25" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-sandbox" version="9.3.0">
          <artifact name="lucene-sandbox-9.3.0.jar">
             <sha256 value="9487e31d4cd97e98c2a8b28c0ef2cc98f4e8732c7ba9a46a314c8c5a9a79073f" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-sandbox" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-sandbox-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="494e272de44064c32d360b564f992817de3b41266426e7eec64a2d8753e0233e" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-spatial-extras" version="9.3.0">
          <artifact name="lucene-spatial-extras-9.3.0.jar">
             <sha256 value="3618279ce88cea5b252d14673fcbc49980a8d40f644fc4767df88341edb32363" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-spatial-extras" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-spatial-extras-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="ed24d0e99466ffa1789b922c4dee8023945d08280519b547950a96de52be177c" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-spatial3d" version="9.3.0">
          <artifact name="lucene-spatial3d-9.3.0.jar">
             <sha256 value="0ca3740fb64ae66f1ff320699c798f97b4ce926ccab5eb718e1c0365b288b92f" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-spatial3d" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-spatial3d-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="2d9a91bfbe4b31ccb03fbbe08b4879c27b19c41df0339c44385a5ae450df5b5a" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-suggest" version="9.3.0">
          <artifact name="lucene-suggest-9.3.0.jar">
             <sha256 value="5202679ebcfa690a0551285c2c3beecd71af505e025e4dc13ba9de895db371db" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-suggest" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-suggest-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="8f8824006222535895be6bb19831e3d7823e430f89a604e2ba17a3d2bc4c1acc" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.lucene" name="lucene-test-framework" version="9.3.0">
          <artifact name="lucene-test-framework-9.3.0.jar">
             <sha256 value="ae2d3b3c9970c0fec9dc4068eb16297e2fbfc8c4d034d792f8546e96a5cad718" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.lucene" name="lucene-test-framework" version="9.4.0-snapshot-923a9f800ae">
+         <artifact name="lucene-test-framework-9.4.0-snapshot-923a9f800ae.jar">
+            <sha256 value="f1f2ac992df5e4a750d0e9c0bce24cb5838c9c602cd2ab318e9749767c66b0ec" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven" name="maven-model" version="3.6.2">
          <artifact name="maven-model-3.6.2.jar">
             <sha256 value="f4ada31d7217efc11d2264dec3716623cefa3440cfb2b6b1dcc640a825159a7d" origin="Generated by Gradle"/>

+ 1 - 1
server/src/main/java/org/elasticsearch/Version.java

@@ -120,7 +120,7 @@ public class Version implements Comparable<Version>, ToXContentFragment {
     public static final Version V_8_3_3 = new Version(8_03_03_99, org.apache.lucene.util.Version.LUCENE_9_2_0);
     public static final Version V_8_4_0 = new Version(8_04_00_99, org.apache.lucene.util.Version.LUCENE_9_3_0);
     public static final Version V_8_4_1 = new Version(8_04_01_99, org.apache.lucene.util.Version.LUCENE_9_3_0);
-    public static final Version V_8_5_0 = new Version(8_05_00_99, org.apache.lucene.util.Version.LUCENE_9_3_0);
+    public static final Version V_8_5_0 = new Version(8_05_00_99, org.apache.lucene.util.Version.LUCENE_9_4_0);
     public static final Version CURRENT = V_8_5_0;
 
     private static final Map<Integer, Version> idToVersion;

+ 1 - 1
server/src/main/java/org/elasticsearch/common/lucene/Lucene.java

@@ -86,7 +86,7 @@ import java.util.List;
 import java.util.Map;
 
 public class Lucene {
-    public static final String LATEST_CODEC = "Lucene92";
+    public static final String LATEST_CODEC = "Lucene94";
 
     public static final String SOFT_DELETES_FIELD = "__soft_deletes";
 

+ 5 - 5
server/src/main/java/org/elasticsearch/index/codec/CodecService.java

@@ -9,7 +9,7 @@
 package org.elasticsearch.index.codec;
 
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.lucene92.Lucene92Codec;
+import org.apache.lucene.codecs.lucene94.Lucene94Codec;
 import org.elasticsearch.common.util.BigArrays;
 import org.elasticsearch.core.Nullable;
 import org.elasticsearch.index.mapper.MapperService;
@@ -35,11 +35,11 @@ public class CodecService {
     public CodecService(@Nullable MapperService mapperService, BigArrays bigArrays) {
         final var codecs = new HashMap<String, Codec>();
         if (mapperService == null) {
-            codecs.put(DEFAULT_CODEC, new Lucene92Codec());
-            codecs.put(BEST_COMPRESSION_CODEC, new Lucene92Codec(Lucene92Codec.Mode.BEST_COMPRESSION));
+            codecs.put(DEFAULT_CODEC, new Lucene94Codec());
+            codecs.put(BEST_COMPRESSION_CODEC, new Lucene94Codec(Lucene94Codec.Mode.BEST_COMPRESSION));
         } else {
-            codecs.put(DEFAULT_CODEC, new PerFieldMapperCodec(Lucene92Codec.Mode.BEST_SPEED, mapperService, bigArrays));
-            codecs.put(BEST_COMPRESSION_CODEC, new PerFieldMapperCodec(Lucene92Codec.Mode.BEST_COMPRESSION, mapperService, bigArrays));
+            codecs.put(DEFAULT_CODEC, new PerFieldMapperCodec(Lucene94Codec.Mode.BEST_SPEED, mapperService, bigArrays));
+            codecs.put(BEST_COMPRESSION_CODEC, new PerFieldMapperCodec(Lucene94Codec.Mode.BEST_COMPRESSION, mapperService, bigArrays));
         }
         codecs.put(LUCENE_DEFAULT_CODEC, Codec.getDefault());
         for (String codec : Codec.availableCodecs()) {

+ 2 - 2
server/src/main/java/org/elasticsearch/index/codec/PerFieldMapperCodec.java

@@ -13,7 +13,7 @@ import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.KnnVectorsFormat;
 import org.apache.lucene.codecs.PostingsFormat;
 import org.apache.lucene.codecs.lucene90.Lucene90DocValuesFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92Codec;
+import org.apache.lucene.codecs.lucene94.Lucene94Codec;
 import org.elasticsearch.common.lucene.Lucene;
 import org.elasticsearch.common.util.BigArrays;
 import org.elasticsearch.index.IndexSettings;
@@ -31,7 +31,7 @@ import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper;
  * per index in real time via the mapping API. If no specific postings format or vector format is
  * configured for a specific field the default postings or vector format is used.
  */
-public class PerFieldMapperCodec extends Lucene92Codec {
+public class PerFieldMapperCodec extends Lucene94Codec {
     private final MapperService mapperService;
 
     private final DocValuesFormat docValuesFormat = new Lucene90DocValuesFormat();

+ 4 - 6
server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java

@@ -16,6 +16,7 @@ import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.Scorable;
 import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.comparators.TermOrdValComparator;
 import org.apache.lucene.util.BitSet;
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.common.util.BigArrays;
@@ -73,7 +74,7 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
         final boolean sortMissingLast = sortMissingLast(missingValue) ^ reversed;
         final BytesRef missingBytes = (BytesRef) missingObject(missingValue, reversed);
         if (indexFieldData instanceof IndexOrdinalsFieldData) {
-            return new FieldComparator.TermOrdValComparator(numHits, null, sortMissingLast) {
+            TermOrdValComparator comparator = new TermOrdValComparator(numHits, null, sortMissingLast, reversed) {
 
                 @Override
                 protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException {
@@ -96,12 +97,9 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
                     }
                 }
 
-                @Override
-                public void setScorer(Scorable scorer) {
-                    BytesRefFieldComparatorSource.this.setScorer(scorer);
-                }
-
             };
+            comparator.disableSkipping();
+            return comparator;
         }
 
         return new FieldComparator.TermValComparator(numHits, null, sortMissingLast) {

+ 2 - 2
server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java

@@ -9,7 +9,7 @@
 package org.elasticsearch.index.mapper.vectors;
 
 import org.apache.lucene.codecs.KnnVectorsFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsFormat;
+import org.apache.lucene.codecs.lucene94.Lucene94HnswVectorsFormat;
 import org.apache.lucene.document.BinaryDocValuesField;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.KnnVectorField;
@@ -522,7 +522,7 @@ public class DenseVectorFieldMapper extends FieldMapper {
             return null; // use default format
         } else {
             HnswIndexOptions hnswIndexOptions = (HnswIndexOptions) indexOptions;
-            return new Lucene92HnswVectorsFormat(hnswIndexOptions.m, hnswIndexOptions.efConstruction);
+            return new Lucene94HnswVectorsFormat(hnswIndexOptions.m, hnswIndexOptions.efConstruction);
         }
     }
 }

+ 12 - 12
server/src/test/java/org/elasticsearch/action/admin/indices/diskusage/IndexDiskUsageAnalyzerTests.java

@@ -13,8 +13,8 @@ import org.apache.lucene.codecs.KnnVectorsFormat;
 import org.apache.lucene.codecs.PostingsFormat;
 import org.apache.lucene.codecs.lucene90.Lucene90DocValuesFormat;
 import org.apache.lucene.codecs.lucene90.Lucene90PostingsFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92Codec;
-import org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsFormat;
+import org.apache.lucene.codecs.lucene94.Lucene94Codec;
+import org.apache.lucene.codecs.lucene94.Lucene94HnswVectorsFormat;
 import org.apache.lucene.codecs.perfield.PerFieldDocValuesFormat;
 import org.apache.lucene.codecs.perfield.PerFieldKnnVectorsFormat;
 import org.apache.lucene.codecs.perfield.PerFieldPostingsFormat;
@@ -262,7 +262,7 @@ public class IndexDiskUsageAnalyzerTests extends ESTestCase {
             logger.info("--> stats {}", stats);
 
             int dataBytes = numDocs * dimension * Float.BYTES; // size of flat vector data
-            int indexBytesEstimate = numDocs * Integer.BYTES * Lucene92HnswVectorsFormat.DEFAULT_MAX_CONN * 2; // rough size of HNSW graph
+            int indexBytesEstimate = numDocs * Integer.BYTES * Lucene94HnswVectorsFormat.DEFAULT_MAX_CONN * 2; // rough size of HNSW graph
             assertTrue(stats.total().getKnnVectorsBytes() > dataBytes + indexBytesEstimate);
         }
     }
@@ -323,7 +323,7 @@ public class IndexDiskUsageAnalyzerTests extends ESTestCase {
     public void testCompletionField() throws Exception {
         IndexWriterConfig config = new IndexWriterConfig().setCommitOnClose(true)
             .setUseCompoundFile(false)
-            .setCodec(new Lucene92Codec(Lucene92Codec.Mode.BEST_SPEED) {
+            .setCodec(new Lucene94Codec(Lucene94Codec.Mode.BEST_SPEED) {
                 @Override
                 public PostingsFormat getPostingsFormatForField(String field) {
                     if (field.startsWith("suggest_")) {
@@ -410,25 +410,25 @@ public class IndexDiskUsageAnalyzerTests extends ESTestCase {
     enum CodecMode {
         BEST_SPEED {
             @Override
-            Lucene92Codec.Mode mode() {
-                return Lucene92Codec.Mode.BEST_SPEED;
+            Lucene94Codec.Mode mode() {
+                return Lucene94Codec.Mode.BEST_SPEED;
             }
         },
 
         BEST_COMPRESSION {
             @Override
-            Lucene92Codec.Mode mode() {
-                return Lucene92Codec.Mode.BEST_COMPRESSION;
+            Lucene94Codec.Mode mode() {
+                return Lucene94Codec.Mode.BEST_COMPRESSION;
             }
         };
 
-        abstract Lucene92Codec.Mode mode();
+        abstract Lucene94Codec.Mode mode();
     }
 
     static void indexRandomly(Directory directory, CodecMode codecMode, int numDocs, Consumer<Document> addFields) throws IOException {
         IndexWriterConfig config = new IndexWriterConfig().setCommitOnClose(true)
             .setUseCompoundFile(randomBoolean())
-            .setCodec(new Lucene92Codec(codecMode.mode()));
+            .setCodec(new Lucene94Codec(codecMode.mode()));
         try (IndexWriter writer = new IndexWriter(directory, config)) {
             for (int i = 0; i < numDocs; i++) {
                 final Document doc = new Document();
@@ -636,7 +636,7 @@ public class IndexDiskUsageAnalyzerTests extends ESTestCase {
         try (DirectoryReader reader = DirectoryReader.open(source)) {
             IndexWriterConfig config = new IndexWriterConfig().setSoftDeletesField(Lucene.SOFT_DELETES_FIELD)
                 .setUseCompoundFile(randomBoolean())
-                .setCodec(new Lucene92Codec(mode.mode()) {
+                .setCodec(new Lucene94Codec(mode.mode()) {
                     @Override
                     public PostingsFormat getPostingsFormatForField(String field) {
                         return new Lucene90PostingsFormat();
@@ -649,7 +649,7 @@ public class IndexDiskUsageAnalyzerTests extends ESTestCase {
 
                     @Override
                     public KnnVectorsFormat getKnnVectorsFormatForField(String field) {
-                        return new Lucene92HnswVectorsFormat();
+                        return new Lucene94HnswVectorsFormat();
                     }
 
                     @Override

+ 6 - 6
server/src/test/java/org/elasticsearch/index/codec/CodecTests.java

@@ -10,7 +10,7 @@ package org.elasticsearch.index.codec;
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92Codec;
+import org.apache.lucene.codecs.lucene94.Lucene94Codec;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
@@ -42,21 +42,21 @@ public class CodecTests extends ESTestCase {
     public void testResolveDefaultCodecs() throws Exception {
         CodecService codecService = createCodecService();
         assertThat(codecService.codec("default"), instanceOf(PerFieldMapperCodec.class));
-        assertThat(codecService.codec("default"), instanceOf(Lucene92Codec.class));
+        assertThat(codecService.codec("default"), instanceOf(Lucene94Codec.class));
     }
 
     public void testDefault() throws Exception {
         Codec codec = createCodecService().codec("default");
-        assertStoredFieldsCompressionEquals(Lucene92Codec.Mode.BEST_SPEED, codec);
+        assertStoredFieldsCompressionEquals(Lucene94Codec.Mode.BEST_SPEED, codec);
     }
 
     public void testBestCompression() throws Exception {
         Codec codec = createCodecService().codec("best_compression");
-        assertStoredFieldsCompressionEquals(Lucene92Codec.Mode.BEST_COMPRESSION, codec);
+        assertStoredFieldsCompressionEquals(Lucene94Codec.Mode.BEST_COMPRESSION, codec);
     }
 
     // write some docs with it, inspect .si to see this was the used compression
-    private void assertStoredFieldsCompressionEquals(Lucene92Codec.Mode expected, Codec actual) throws Exception {
+    private void assertStoredFieldsCompressionEquals(Lucene94Codec.Mode expected, Codec actual) throws Exception {
         Directory dir = newDirectory();
         IndexWriterConfig iwc = newIndexWriterConfig(null);
         iwc.setCodec(actual);
@@ -68,7 +68,7 @@ public class CodecTests extends ESTestCase {
         SegmentReader sr = (SegmentReader) ir.leaves().get(0).reader();
         String v = sr.getSegmentInfo().info.getAttribute(Lucene90StoredFieldsFormat.MODE_KEY);
         assertNotNull(v);
-        assertEquals(expected, Lucene92Codec.Mode.valueOf(v));
+        assertEquals(expected, Lucene94Codec.Mode.valueOf(v));
         ir.close();
         dir.close();
     }

+ 2 - 2
server/src/test/java/org/elasticsearch/index/engine/CompletionStatsCacheTests.java

@@ -8,7 +8,7 @@
 package org.elasticsearch.index.engine;
 
 import org.apache.lucene.codecs.PostingsFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92Codec;
+import org.apache.lucene.codecs.lucene94.Lucene94Codec;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
@@ -45,7 +45,7 @@ public class CompletionStatsCacheTests extends ESTestCase {
     public void testCompletionStatsCache() throws IOException, InterruptedException {
         final IndexWriterConfig indexWriterConfig = newIndexWriterConfig();
         final PostingsFormat postingsFormat = new Completion90PostingsFormat();
-        indexWriterConfig.setCodec(new Lucene92Codec() {
+        indexWriterConfig.setCodec(new Lucene94Codec() {
             @Override
             public PostingsFormat getPostingsFormatForField(String field) {
                 return postingsFormat; // all fields are suggest fields

+ 3 - 1
server/src/test/java/org/elasticsearch/index/fielddata/AbstractStringFieldDataTestCase.java

@@ -53,6 +53,7 @@ import java.util.List;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.not;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.Matchers.sameInstance;
@@ -318,7 +319,8 @@ public abstract class AbstractStringFieldDataTestCase extends AbstractFieldDataI
             randomBoolean() ? numDocs : randomIntBetween(10, numDocs),
             new Sort(sortField)
         );
-        assertEquals(numDocs, topDocs.totalHits.value);
+
+        assertThat(topDocs.totalHits.value, lessThanOrEqualTo((long) numDocs));
         BytesRef previousValue = first ? null : reverse ? UnicodeUtil.BIG_TERM : new BytesRef();
         for (int i = 0; i < topDocs.scoreDocs.length; ++i) {
             final String docValue = searcher.doc(topDocs.scoreDocs[i].doc).get("value");

+ 5 - 5
server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java

@@ -12,7 +12,7 @@ import com.carrotsearch.randomizedtesting.generators.RandomPicks;
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.KnnVectorsFormat;
-import org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsFormat;
+import org.apache.lucene.codecs.lucene94.Lucene94HnswVectorsFormat;
 import org.apache.lucene.document.BinaryDocValuesField;
 import org.apache.lucene.document.KnnVectorField;
 import org.apache.lucene.index.IndexableField;
@@ -40,8 +40,8 @@ import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.List;
 
-import static org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsFormat.DEFAULT_BEAM_WIDTH;
-import static org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsFormat.DEFAULT_MAX_CONN;
+import static org.apache.lucene.codecs.lucene94.Lucene94HnswVectorsFormat.DEFAULT_BEAM_WIDTH;
+import static org.apache.lucene.codecs.lucene94.Lucene94HnswVectorsFormat.DEFAULT_MAX_CONN;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.instanceOf;
@@ -455,8 +455,8 @@ public class DenseVectorFieldMapperTests extends MapperTestCase {
         Codec codec = codecService.codec("default");
         assertThat(codec, instanceOf(PerFieldMapperCodec.class));
         KnnVectorsFormat knnVectorsFormat = ((PerFieldMapperCodec) codec).getKnnVectorsFormatForField("field");
-        assertThat(knnVectorsFormat, instanceOf(Lucene92HnswVectorsFormat.class));
-        String expectedString = "lucene92HnswVectorsFormat(name = lucene92HnswVectorsFormat, maxConn = "
+        assertThat(knnVectorsFormat, instanceOf(Lucene94HnswVectorsFormat.class));
+        String expectedString = "Lucene94HnswVectorsFormat(name=Lucene94HnswVectorsFormat, maxConn="
             + m
             + ", beamWidth="
             + efConstruction