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