5656import java .util .LinkedHashMap ;
5757import java .util .List ;
5858import java .util .Map ;
59+ import java .util .NavigableSet ;
5960import java .util .Set ;
6061import java .util .TreeMap ;
6162import java .util .stream .Collectors ;
6263import java .util .stream .Stream ;
6364
65+ import static org .elasticsearch .index .IndexVersions .NEW_SPARSE_VECTOR ;
6466import static org .elasticsearch .index .IndexVersions .SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT ;
6567import static org .elasticsearch .index .IndexVersions .SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X ;
6668import static org .elasticsearch .index .IndexVersions .UPGRADE_TO_LUCENE_10_0_0 ;
67- import static org .elasticsearch .index .mapper .vectors .SparseVectorFieldMapper .NEW_SPARSE_VECTOR_INDEX_VERSION ;
68- import static org .elasticsearch .index .mapper .vectors .SparseVectorFieldMapper .PREVIOUS_SPARSE_VECTOR_INDEX_VERSION ;
69- import static org .elasticsearch .index .mapper .vectors .SparseVectorFieldMapper .SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_VERSION ;
7069import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertToXContentEquivalent ;
7170import static org .elasticsearch .xcontent .XContentFactory .jsonBuilder ;
7271import static org .hamcrest .Matchers .containsString ;
@@ -288,7 +287,7 @@ public void testDefaultsWithAndWithoutIncludeDefaultsOlderIndexVersion() throws
288287 IndexVersion indexVersion = IndexVersionUtils .randomVersionBetween (
289288 random (),
290289 UPGRADE_TO_LUCENE_10_0_0 ,
291- IndexVersionUtils .getPreviousVersion (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_VERSION )
290+ IndexVersionUtils .getPreviousVersion (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT )
292291 );
293292
294293 XContentBuilder orig = JsonXContent .contentBuilder ().startObject ();
@@ -510,21 +509,21 @@ protected IngestScriptSupport ingestScriptSupport() {
510509 @ Override
511510 protected String [] getParseMinimalWarnings (IndexVersion indexVersion ) {
512511 String [] additionalWarnings = null ;
513- if (indexVersion .before (PREVIOUS_SPARSE_VECTOR_INDEX_VERSION )) {
512+ if (indexVersion .before (IndexVersions . V_8_0_0 )) {
514513 additionalWarnings = new String [] { SparseVectorFieldMapper .ERROR_MESSAGE_7X };
515514 }
516515 return Strings .concatStringArrays (super .getParseMinimalWarnings (indexVersion ), additionalWarnings );
517516 }
518517
519518 @ Override
520519 protected IndexVersion boostNotAllowedIndexVersion () {
521- return NEW_SPARSE_VECTOR_INDEX_VERSION ;
520+ return NEW_SPARSE_VECTOR ;
522521 }
523522
524523 public void testSparseVectorUnsupportedIndex () {
525524 IndexVersion version = IndexVersionUtils .randomVersionBetween (
526525 random (),
527- PREVIOUS_SPARSE_VECTOR_INDEX_VERSION ,
526+ IndexVersions . V_8_0_0 ,
528527 IndexVersions .FIRST_DETACHED_INDEX_VERSION
529528 );
530529 Exception e = expectThrows (MapperParsingException .class , () -> createMapperService (version , fieldMapping (b -> {
@@ -802,7 +801,7 @@ private PruningScenario getEffectivePruningScenario(
802801 }
803802
804803 if (shouldPrune == null ) {
805- shouldPrune = indexVersion .between (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X , IndexVersions . UPGRADE_TO_LUCENE_10_0_0 ) || indexVersion .onOrAfter (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT );
804+ shouldPrune = indexVersion .between (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X , UPGRADE_TO_LUCENE_10_0_0 ) || indexVersion .onOrAfter (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT );
806805 }
807806
808807 PruningScenario pruningScenario = PruningScenario .NO_PRUNING ;
@@ -840,10 +839,7 @@ private List<Query> getExpectedQueryClauses(
840839 }
841840
842841 private void assertPruningScenario (PruningOptions indexPruningOptions , PruningOptions queryPruningOptions ) throws IOException {
843- IndexVersion indexVersion = ESTestCase .randomFrom (IndexVersionUtils .allReleasedVersions ().subSet (
844- SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X ,
845- IndexVersion .current ()
846- ));
842+ IndexVersion indexVersion = getIndexVersion ();
847843 MapperService mapperService = createMapperService (indexVersion , getIndexMapping (indexPruningOptions ));
848844 PruningScenario effectivePruningScenario = getEffectivePruningScenario (indexPruningOptions , queryPruningOptions , indexVersion );
849845 withSearchExecutionContext (mapperService , (context ) -> {
@@ -862,6 +858,46 @@ private void assertPruningScenario(PruningOptions indexPruningOptions, PruningOp
862858 });
863859 }
864860
861+ private static IndexVersion getIndexVersion () {
862+ VersionRange versionRange = randomFrom (VersionRange .values ());
863+ return versionRange .getRandomVersion ();
864+ }
865+
866+ private enum VersionRange {
867+ ES_V8X_WITHOUT_SUPPORT (
868+ NEW_SPARSE_VECTOR ,
869+ IndexVersionUtils .getPreviousVersion (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X )
870+ ),
871+ ES_V8X_WITH_SUPPORT (
872+ SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT_BACKPORT_8_X ,
873+ IndexVersionUtils .getPreviousVersion (UPGRADE_TO_LUCENE_10_0_0 )
874+ ),
875+ ES_V9X_WITHOUT_SUPPORT (
876+ UPGRADE_TO_LUCENE_10_0_0 ,
877+ IndexVersionUtils .getPreviousVersion (SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT )
878+ ),
879+ ES_V9X_WITH_SUPPORT (
880+ SPARSE_VECTOR_PRUNING_INDEX_OPTIONS_SUPPORT ,
881+ IndexVersion .current ()
882+ );
883+
884+ private final IndexVersion fromVersion ;
885+ private final IndexVersion toVersion ;
886+
887+ VersionRange (IndexVersion fromVersion , IndexVersion toVersion ) {
888+ this .fromVersion = fromVersion ;
889+ this .toVersion = toVersion ;
890+ }
891+
892+ IndexVersion getRandomVersion () {
893+ // TODO: replace implementation with `IndexVersionUtils::randomVersionBetween` once support is added
894+ // for handling unbalanced version distributions.
895+ NavigableSet <IndexVersion > allReleaseVersions = IndexVersionUtils .allReleasedVersions ();
896+ Set <IndexVersion > candidateVersions = allReleaseVersions .subSet (fromVersion , toVersion );
897+ return ESTestCase .randomFrom (candidateVersions );
898+ }
899+ }
900+
865901 private static final List <WeightedToken > QUERY_VECTORS = Stream .of (RARE_TOKENS , MEDIUM_TOKENS , COMMON_TOKENS )
866902 .flatMap (map -> map .entrySet ().stream ())
867903 .map (entry -> new WeightedToken (entry .getKey (), entry .getValue ()))
0 commit comments