in src/main/java/org/opensearch/knn/training/VectorReader.java [61:102]
public void read(ClusterService clusterService, String indexName, String fieldName, int maxVectorCount,
int searchSize, Consumer<List<Float[]>> vectorConsumer, ActionListener<SearchResponse> listener) {
ValidationException validationException = null;
// Validate arguments
if (maxVectorCount <= 0) {
validationException = new ValidationException();
validationException.addValidationError("maxVectorCount must be >= 0");
}
if (searchSize > 10000 || searchSize <= 0) {
validationException = validationException == null ? new ValidationException() : validationException;
validationException.addValidationError("searchSize must be > 0 and <= 10000");
}
IndexMetadata indexMetadata = clusterService.state().metadata().index(indexName);
if (indexMetadata == null) {
validationException = validationException == null ? new ValidationException() : validationException;
validationException.addValidationError("index \"" + indexName + "\" does not exist");
throw validationException;
}
ValidationException fieldValidationException = IndexUtil.validateKnnField(indexMetadata, fieldName, -1, null);
if (fieldValidationException != null) {
validationException = validationException == null ? new ValidationException() : validationException;
validationException.addValidationErrors(validationException.validationErrors());
}
if (validationException != null) {
throw validationException;
}
// Start reading vectors from index
SearchScrollRequestBuilder searchScrollRequestBuilder = createSearchScrollRequestBuilder();
ActionListener<SearchResponse> vectorReaderListener = new VectorReaderListener(client, fieldName,
maxVectorCount, 0, listener, vectorConsumer, searchScrollRequestBuilder);
createSearchRequestBuilder(indexName, fieldName, Integer.min(maxVectorCount, searchSize))
.execute(vectorReaderListener);
}