Skip to content

Commit c7ac05c

Browse files
authored
Clean Code Post Lucene 10.0.1 change (opensearch-project#2541)
Signed-off-by: Vikasht34 <viktari@amazon.com>
1 parent edcbe31 commit c7ac05c

File tree

3 files changed

+61
-60
lines changed

3 files changed

+61
-60
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1515
### Maintenance
1616
* Update package name to fix compilation issue [#2513](https://github.com/opensearch-project/k-NN/pull/2513)
1717
### Refactoring
18+
* Small Refactor Post Lucene 10.0.1 upgrade [#2541](https://github.com/opensearch-project/k-NN/pull/2541)
1819
* Refactor codec to leverage backwards_codecs [#2546](https://github.com/opensearch-project/k-NN/pull/2546)
1920

2021
## [Unreleased 2.x](https://github.com/opensearch-project/k-NN/compare/2.19...2.x)

src/main/java/org/opensearch/knn/index/KNNVectorScriptDocValues.java

+18-11
Original file line numberDiff line numberDiff line change
@@ -74,26 +74,33 @@ public float[] get(int i) {
7474
/**
7575
* Creates a KNNVectorScriptDocValues object based on the provided parameters.
7676
*
77-
* @param values The DocIdSetIterator representing the vector values.
77+
* @param knnVectorValues The DocIdSetIterator representing the vector values.
7878
* @param fieldName The name of the field.
7979
* @param vectorDataType The data type of the vector.
8080
* @return A KNNVectorScriptDocValues object based on the type of the values.
8181
* @throws IllegalArgumentException If the type of values is unsupported.
8282
*/
83-
public static KNNVectorScriptDocValues create(Object values, String fieldName, VectorDataType vectorDataType) {
84-
Objects.requireNonNull(values, "values must not be null");
85-
86-
if (values instanceof FloatVectorValues) {
87-
return new KNNFloatVectorScriptDocValues((FloatVectorValues) values, fieldName, vectorDataType);
88-
} else if (values instanceof ByteVectorValues) {
89-
return new KNNByteVectorScriptDocValues((ByteVectorValues) values, fieldName, vectorDataType);
90-
} else if (values instanceof BinaryDocValues) {
91-
return new KNNNativeVectorScriptDocValues((BinaryDocValues) values, fieldName, vectorDataType);
83+
public static KNNVectorScriptDocValues create(KnnVectorValues knnVectorValues, String fieldName, VectorDataType vectorDataType) {
84+
Objects.requireNonNull(knnVectorValues, "values must not be null");
85+
if (knnVectorValues instanceof FloatVectorValues) {
86+
return new KNNFloatVectorScriptDocValues((FloatVectorValues) knnVectorValues, fieldName, vectorDataType);
87+
} else if (knnVectorValues instanceof ByteVectorValues) {
88+
return new KNNByteVectorScriptDocValues((ByteVectorValues) knnVectorValues, fieldName, vectorDataType);
9289
} else {
93-
throw new IllegalArgumentException("Unsupported values type: " + values.getClass());
90+
throw new IllegalArgumentException("Unsupported values type: " + knnVectorValues.getClass());
9491
}
9592
}
9693

94+
public static KNNVectorScriptDocValues create(DocIdSetIterator docIdSetIterator, String fieldName, VectorDataType vectorDataType) {
95+
Objects.requireNonNull(docIdSetIterator, "values must not be null");
96+
if (docIdSetIterator instanceof BinaryDocValues) {
97+
return new KNNNativeVectorScriptDocValues((BinaryDocValues) docIdSetIterator, fieldName, vectorDataType);
98+
} else {
99+
throw new IllegalArgumentException("Unsupported values type: " + docIdSetIterator.getClass());
100+
}
101+
102+
}
103+
97104
private static final class KNNByteVectorScriptDocValues extends KNNVectorScriptDocValues {
98105
private final ByteVectorValues values;
99106
private final KnnVectorValues.DocIndexIterator iterator;

src/main/java/org/opensearch/knn/index/vectorvalues/KNNVectorValuesIterator.java

+42-49
Original file line numberDiff line numberDiff line change
@@ -67,32 +67,15 @@ public interface KNNVectorValuesIterator {
6767
VectorValueExtractorStrategy getVectorExtractorStrategy();
6868

6969
/**
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.
7271
*/
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;
8774

88-
DocIdsIteratorValues(final DocIdSetIterator docIdSetIterator) {
75+
AbstractVectorValuesIterator(@NonNull final DocIdSetIterator docIdSetIterator) {
8976
this.docIdSetIterator = docIdSetIterator;
9077
}
9178

92-
public KnnVectorValues getKnnVectorValues() {
93-
return knnVectorValues;
94-
}
95-
9679
@Override
9780
public int docId() {
9881
return docIdSetIterator.docID();
@@ -113,6 +96,41 @@ public DocIdSetIterator getDocIdSetIterator() {
11396
return docIdSetIterator;
11497
}
11598

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+
116134
@Override
117135
public long liveDocs() {
118136
if (docIdSetIterator instanceof BinaryDocValues) {
@@ -129,34 +147,19 @@ public long liveDocs() {
129147
public VectorValueExtractorStrategy getVectorExtractorStrategy() {
130148
return new VectorValueExtractorStrategy.DISIVectorExtractor();
131149
}
150+
132151
}
133152

134153
/**
135154
* A FieldWriterIteratorValues is mainly used when Vectors are stored in {@link KnnFieldVectorsWriter} interface.
136155
*/
137-
class FieldWriterIteratorValues<T> implements KNNVectorValuesIterator {
138-
private final DocIdSetIterator docIdSetIterator;
156+
class FieldWriterIteratorValues<T> extends AbstractVectorValuesIterator {
139157
private final Map<Integer, T> vectors;
140158

141159
FieldWriterIteratorValues(@NonNull final DocsWithFieldSet docsWithFieldSet, @NonNull final Map<Integer, T> vectors) {
160+
super(docsWithFieldSet.iterator());
142161
assert docsWithFieldSet.iterator().cost() == vectors.size();
143162
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();
160163
}
161164

162165
/**
@@ -167,16 +170,6 @@ public T vectorsValue() {
167170
return vectors.get(docId());
168171
}
169172

170-
@Override
171-
public DocIdSetIterator getDocIdSetIterator() {
172-
return docIdSetIterator;
173-
}
174-
175-
@Override
176-
public long liveDocs() {
177-
return docIdSetIterator.cost();
178-
}
179-
180173
@Override
181174
public VectorValueExtractorStrategy getVectorExtractorStrategy() {
182175
return new VectorValueExtractorStrategy.FieldWriterIteratorVectorExtractor();

0 commit comments

Comments
 (0)