@@ -67,32 +67,15 @@ public interface KNNVectorValuesIterator {
67
67
VectorValueExtractorStrategy getVectorExtractorStrategy ();
68
68
69
69
/**
70
- * A DocIdsIteratorValues provides a common iteration logic for all Values that implements
71
- * {@link DocIdSetIterator} interface. Example: {@link BinaryDocValues}, {@link FloatVectorValues} etc.
70
+ * Abstract base class for KNN vector iterators, encapsulating common iteration logic.
72
71
*/
73
- class DocIdsIteratorValues implements KNNVectorValuesIterator {
74
- private final DocIdSetIterator docIdSetIterator ;
75
- private KnnVectorValues knnVectorValues = null ; // Added reference to KnnVectorValues
76
- @ Getter
77
- @ Setter
78
- private int lastOrd = -1 ;
79
- @ Getter
80
- @ Setter
81
- private Object lastAccessedVector = null ;
82
-
83
- DocIdsIteratorValues (@ NonNull final KnnVectorValues knnVectorValues ) {
84
- this .docIdSetIterator = knnVectorValues .iterator ();
85
- this .knnVectorValues = knnVectorValues ;
86
- }
72
+ abstract class AbstractVectorValuesIterator implements KNNVectorValuesIterator {
73
+ protected final DocIdSetIterator docIdSetIterator ;
87
74
88
- DocIdsIteratorValues ( final DocIdSetIterator docIdSetIterator ) {
75
+ AbstractVectorValuesIterator ( @ NonNull final DocIdSetIterator docIdSetIterator ) {
89
76
this .docIdSetIterator = docIdSetIterator ;
90
77
}
91
78
92
- public KnnVectorValues getKnnVectorValues () {
93
- return knnVectorValues ;
94
- }
95
-
96
79
@ Override
97
80
public int docId () {
98
81
return docIdSetIterator .docID ();
@@ -113,6 +96,41 @@ public DocIdSetIterator getDocIdSetIterator() {
113
96
return docIdSetIterator ;
114
97
}
115
98
99
+ @ Override
100
+ public long liveDocs () {
101
+ return docIdSetIterator .cost ();
102
+ }
103
+ }
104
+
105
+ /**
106
+ * A DocIdsIteratorValues provides a common iteration logic for all Values that implements
107
+ * {@link DocIdSetIterator} interface. Example: {@link BinaryDocValues}, {@link FloatVectorValues} etc.
108
+ */
109
+ class DocIdsIteratorValues extends AbstractVectorValuesIterator {
110
+
111
+ private final KnnVectorValues knnVectorValues ;
112
+
113
+ @ Getter
114
+ @ Setter
115
+ private int lastOrd = -1 ;
116
+ @ Getter
117
+ @ Setter
118
+ private Object lastAccessedVector = null ;
119
+
120
+ DocIdsIteratorValues (@ NonNull final KnnVectorValues knnVectorValues ) {
121
+ super (knnVectorValues .iterator ());
122
+ this .knnVectorValues = knnVectorValues ;
123
+ }
124
+
125
+ DocIdsIteratorValues (@ NonNull final DocIdSetIterator docIdSetIterator ) {
126
+ super (docIdSetIterator );
127
+ this .knnVectorValues = null ;
128
+ }
129
+
130
+ public KnnVectorValues getKnnVectorValues () {
131
+ return knnVectorValues ;
132
+ }
133
+
116
134
@ Override
117
135
public long liveDocs () {
118
136
if (docIdSetIterator instanceof BinaryDocValues ) {
@@ -129,34 +147,19 @@ public long liveDocs() {
129
147
public VectorValueExtractorStrategy getVectorExtractorStrategy () {
130
148
return new VectorValueExtractorStrategy .DISIVectorExtractor ();
131
149
}
150
+
132
151
}
133
152
134
153
/**
135
154
* A FieldWriterIteratorValues is mainly used when Vectors are stored in {@link KnnFieldVectorsWriter} interface.
136
155
*/
137
- class FieldWriterIteratorValues <T > implements KNNVectorValuesIterator {
138
- private final DocIdSetIterator docIdSetIterator ;
156
+ class FieldWriterIteratorValues <T > extends AbstractVectorValuesIterator {
139
157
private final Map <Integer , T > vectors ;
140
158
141
159
FieldWriterIteratorValues (@ NonNull final DocsWithFieldSet docsWithFieldSet , @ NonNull final Map <Integer , T > vectors ) {
160
+ super (docsWithFieldSet .iterator ());
142
161
assert docsWithFieldSet .iterator ().cost () == vectors .size ();
143
162
this .vectors = vectors ;
144
- this .docIdSetIterator = docsWithFieldSet .iterator ();
145
- }
146
-
147
- @ Override
148
- public int docId () {
149
- return docIdSetIterator .docID ();
150
- }
151
-
152
- @ Override
153
- public int advance (int docId ) throws IOException {
154
- return docIdSetIterator .advance (docId );
155
- }
156
-
157
- @ Override
158
- public int nextDoc () throws IOException {
159
- return docIdSetIterator .nextDoc ();
160
163
}
161
164
162
165
/**
@@ -167,16 +170,6 @@ public T vectorsValue() {
167
170
return vectors .get (docId ());
168
171
}
169
172
170
- @ Override
171
- public DocIdSetIterator getDocIdSetIterator () {
172
- return docIdSetIterator ;
173
- }
174
-
175
- @ Override
176
- public long liveDocs () {
177
- return docIdSetIterator .cost ();
178
- }
179
-
180
173
@ Override
181
174
public VectorValueExtractorStrategy getVectorExtractorStrategy () {
182
175
return new VectorValueExtractorStrategy .FieldWriterIteratorVectorExtractor ();
0 commit comments