2525import org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .VectorSimilarity ;
2626import org .elasticsearch .search .DocValueFormat ;
2727import org .elasticsearch .search .vectors .DenseVectorQuery ;
28+ import org .elasticsearch .search .vectors .DiversifyingChildrenIVFKnnFloatVectorQuery ;
2829import org .elasticsearch .search .vectors .DiversifyingParentBlockQuery ;
2930import org .elasticsearch .search .vectors .ESKnnByteVectorQuery ;
3031import org .elasticsearch .search .vectors .ESKnnFloatVectorQuery ;
32+ import org .elasticsearch .search .vectors .IVFKnnFloatVectorQuery ;
3133import org .elasticsearch .search .vectors .RescoreKnnVectorQuery ;
3234import org .elasticsearch .search .vectors .VectorData ;
3335
3436import java .io .IOException ;
37+ import java .util .ArrayList ;
38+ import java .util .Arrays ;
3539import java .util .Collections ;
3640import java .util .List ;
3741import java .util .Set ;
3842import java .util .function .Function ;
3943
44+ import static org .elasticsearch .index .codec .vectors .IVFVectorsFormat .MAX_VECTORS_PER_CLUSTER ;
45+ import static org .elasticsearch .index .codec .vectors .IVFVectorsFormat .MIN_VECTORS_PER_CLUSTER ;
4046import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .BBQ_MIN_DIMS ;
4147import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .ElementType .BIT ;
4248import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .ElementType .BYTE ;
4349import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .ElementType .FLOAT ;
50+ import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .IVF_FORMAT ;
4451import static org .elasticsearch .index .mapper .vectors .DenseVectorFieldMapper .OVERSAMPLE_LIMIT ;
4552import static org .hamcrest .Matchers .containsString ;
4653import static org .hamcrest .Matchers .equalTo ;
@@ -66,7 +73,7 @@ private DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsNonQuan
6673 }
6774
6875 public static DenseVectorFieldMapper .DenseVectorIndexOptions randomIndexOptionsAll () {
69- return randomFrom (
76+ List < DenseVectorFieldMapper . DenseVectorIndexOptions > options = new ArrayList <>( Arrays . asList (
7077 new DenseVectorFieldMapper .HnswIndexOptions (randomIntBetween (1 , 100 ), randomIntBetween (1 , 10_000 )),
7178 new DenseVectorFieldMapper .Int8HnswIndexOptions (
7279 randomIntBetween (1 , 100 ),
@@ -95,7 +102,18 @@ public static DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsA
95102 randomFrom ((DenseVectorFieldMapper .RescoreVector ) null , randomRescoreVector ())
96103 ),
97104 new DenseVectorFieldMapper .BBQFlatIndexOptions (randomFrom ((DenseVectorFieldMapper .RescoreVector ) null , randomRescoreVector ()))
98- );
105+ ));
106+
107+ if (IVF_FORMAT .isEnabled ()) {
108+ options .add (
109+ new DenseVectorFieldMapper .BBQIVFIndexOptions (
110+ randomIntBetween (MIN_VECTORS_PER_CLUSTER , MAX_VECTORS_PER_CLUSTER ),
111+ randomFloatBetween (0.0f , 100.0f , true ),
112+ randomFrom ((DenseVectorFieldMapper .RescoreVector ) null , randomRescoreVector ()))
113+ );
114+ }
115+
116+ return randomFrom (options );
99117 }
100118
101119 private DenseVectorFieldMapper .DenseVectorIndexOptions randomIndexOptionsHnswQuantized () {
@@ -244,7 +262,9 @@ public void testCreateNestedKnnQuery() {
244262 if (field .getIndexOptions ().isFlat ()) {
245263 assertThat (query , instanceOf (DiversifyingParentBlockQuery .class ));
246264 } else {
247- assertTrue (query instanceof DiversifyingChildrenFloatKnnVectorQuery || query instanceof PatienceKnnVectorQuery );
265+ assertTrue (query instanceof DiversifyingChildrenFloatKnnVectorQuery
266+ || query instanceof PatienceKnnVectorQuery
267+ || query instanceof DiversifyingChildrenIVFKnnFloatVectorQuery );
248268 }
249269 }
250270 {
@@ -475,7 +495,9 @@ public void testCreateKnnQueryMaxDims() {
475495 if (fieldWith4096dims .getIndexOptions ().isFlat ()) {
476496 assertThat (query , instanceOf (DenseVectorQuery .Floats .class ));
477497 } else {
478- assertTrue (query instanceof KnnFloatVectorQuery || query instanceof PatienceKnnVectorQuery );
498+ assertTrue (query instanceof KnnFloatVectorQuery
499+ || query instanceof PatienceKnnVectorQuery
500+ || query instanceof IVFKnnFloatVectorQuery );
479501 }
480502 }
481503
@@ -792,7 +814,7 @@ private static void checkRescoreQueryParameters(
792814 DenseVectorFieldType fieldType ,
793815 int k ,
794816 int candidates ,
795- float visitPercentage ,
817+ Float visitPercentage ,
796818 float oversample ,
797819 int expectedK ,
798820 int expectedCandidates ,
0 commit comments