|
32 | 32 | import org.elasticsearch.common.settings.Settings;
|
33 | 33 | import org.elasticsearch.common.util.BigArrays;
|
34 | 34 | import org.elasticsearch.core.CheckedConsumer;
|
| 35 | +import org.elasticsearch.index.IndexVersion; |
35 | 36 | import org.elasticsearch.index.fielddata.ScriptDocValues;
|
36 | 37 | import org.elasticsearch.index.mapper.IpFieldMapper;
|
37 | 38 | import org.elasticsearch.index.mapper.KeywordFieldMapper;
|
38 | 39 | import org.elasticsearch.index.mapper.MappedFieldType;
|
39 | 40 | import org.elasticsearch.index.mapper.NumberFieldMapper;
|
40 | 41 | import org.elasticsearch.index.mapper.RangeFieldMapper;
|
41 | 42 | import org.elasticsearch.index.mapper.RangeType;
|
| 43 | +import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper; |
| 44 | +import org.elasticsearch.index.mapper.vectors.SparseVectorFieldMapper; |
42 | 45 | import org.elasticsearch.script.MockScriptEngine;
|
43 | 46 | import org.elasticsearch.script.Script;
|
44 | 47 | import org.elasticsearch.script.ScriptEngine;
|
@@ -224,6 +227,51 @@ public void testQueryFiltersAll() throws IOException {
|
224 | 227 | });
|
225 | 228 | }
|
226 | 229 |
|
| 230 | + public void testVectorValueThrows() { |
| 231 | + final CardinalityAggregationBuilder aggregationBuilder = new CardinalityAggregationBuilder("card_agg_name").field("vector_value"); |
| 232 | + final MappedFieldType mappedFieldTypes; |
| 233 | + boolean isDense = randomBoolean(); |
| 234 | + if (isDense) { |
| 235 | + mappedFieldTypes = new DenseVectorFieldMapper.DenseVectorFieldType( |
| 236 | + "vector_value", |
| 237 | + IndexVersion.current(), |
| 238 | + DenseVectorFieldMapper.ElementType.FLOAT, |
| 239 | + 64, |
| 240 | + true, |
| 241 | + DenseVectorFieldMapper.VectorSimilarity.COSINE, |
| 242 | + DenseVectorFieldMapper.VectorIndexType.FLAT.parseIndexOptions("vector_value", new HashMap<>(), IndexVersion.current()), |
| 243 | + new HashMap<>(), |
| 244 | + false |
| 245 | + ); |
| 246 | + } else { |
| 247 | + mappedFieldTypes = new SparseVectorFieldMapper.SparseVectorFieldType( |
| 248 | + IndexVersion.current(), |
| 249 | + "vector_value", |
| 250 | + false, |
| 251 | + new HashMap<>() |
| 252 | + ); |
| 253 | + } |
| 254 | + |
| 255 | + IllegalArgumentException exception = assertThrows( |
| 256 | + IllegalArgumentException.class, |
| 257 | + () -> testAggregation(aggregationBuilder, new MatchAllDocsQuery(), iw -> { |
| 258 | + iw.addDocument(singleton(new SortedDocValuesField("vector_value", new BytesRef("one")))); |
| 259 | + iw.addDocument(singleton(new SortedDocValuesField("unrelatedField", new BytesRef("two")))); |
| 260 | + iw.addDocument(singleton(new SortedDocValuesField("str_value", new BytesRef("three")))); |
| 261 | + iw.addDocument(singleton(new SortedDocValuesField("str_value", new BytesRef("one")))); |
| 262 | + }, card -> { |
| 263 | + assertEquals(2, card.getValue(), 0); |
| 264 | + assertTrue(AggregationInspectionHelper.hasValue(card)); |
| 265 | + }, mappedFieldTypes) |
| 266 | + ); |
| 267 | + |
| 268 | + if (isDense) { |
| 269 | + assertEquals("Cardinality aggregation [card_agg_name] does not support vector fields", exception.getMessage()); |
| 270 | + } else { |
| 271 | + assertEquals("[sparse_vector] fields do not support sorting, scripting or aggregating", exception.getMessage()); |
| 272 | + } |
| 273 | + } |
| 274 | + |
227 | 275 | public void testSingleValuedString() throws IOException {
|
228 | 276 | final CardinalityAggregationBuilder aggregationBuilder = new CardinalityAggregationBuilder("name").field("str_value");
|
229 | 277 | final MappedFieldType mappedFieldTypes = new KeywordFieldMapper.KeywordFieldType("str_value");
|
|
0 commit comments