Add test for ghost fields to BaseKnnVectorQueryTestCase. (#13455)

This commit is contained in:
Adrien Grand 2024-06-06 16:00:55 +02:00 committed by GitHub
parent b85c99daaf
commit d5aa88bd7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 38 additions and 0 deletions

View File

@ -32,6 +32,7 @@ import org.apache.lucene.document.IntPoint;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.FilterDirectoryReader;
import org.apache.lucene.index.FilterLeafReader;
import org.apache.lucene.index.IndexReader;
@ -719,6 +720,43 @@ abstract class BaseKnnVectorQueryTestCase extends LuceneTestCase {
}
}
// Test ghost fields, that have a field info but no values
public void testMergeAwayAllValues() throws IOException {
int dim = 30;
try (Directory dir = newDirectoryForTest();
IndexWriter w = new IndexWriter(dir, newIndexWriterConfig())) {
Document doc = new Document();
doc.add(new StringField("id", "0", Field.Store.NO));
w.addDocument(doc);
doc = new Document();
doc.add(new StringField("id", "1", Field.Store.NO));
doc.add(getKnnVectorField("field", randomVector(dim)));
w.addDocument(doc);
w.commit();
w.deleteDocuments(new Term("id", "1"));
w.forceMerge(1);
try (DirectoryReader reader = DirectoryReader.open(w)) {
LeafReader leafReader = getOnlyLeafReader(reader);
FieldInfo fi = leafReader.getFieldInfos().fieldInfo("field");
assertNotNull(fi);
DocIdSetIterator vectorValues;
switch (fi.getVectorEncoding()) {
case BYTE:
vectorValues = leafReader.getByteVectorValues("field");
break;
case FLOAT32:
vectorValues = leafReader.getFloatVectorValues("field");
break;
default:
throw new AssertionError();
}
assertNotNull(vectorValues);
assertEquals(NO_MORE_DOCS, vectorValues.nextDoc());
}
}
}
/**
* Check that the query behaves reasonably when using a custom filter reader where there are no
* live docs.