|
32 | 32 | import org.elasticsearch.index.mapper.MapperService; |
33 | 33 | import org.elasticsearch.index.mapper.MapperServiceTestCase; |
34 | 34 | import org.elasticsearch.index.mapper.SourceToParse; |
| 35 | +import org.elasticsearch.index.query.BoolQueryBuilder; |
| 36 | +import org.elasticsearch.index.query.MatchAllQueryBuilder; |
35 | 37 | import org.elasticsearch.index.query.NestedQueryBuilder; |
36 | 38 | import org.elasticsearch.index.query.QueryBuilder; |
37 | 39 | import org.elasticsearch.index.shard.ShardId; |
@@ -170,6 +172,34 @@ public void testSparseVector() throws Exception { |
170 | 172 | ); |
171 | 173 | } |
172 | 174 |
|
| 175 | + @SuppressWarnings("unchecked") |
| 176 | + public void testNoSemanticField() throws Exception { |
| 177 | + var mapperService = createDefaultMapperService(useLegacyFormat); |
| 178 | + Map<String, Object> queryMap = (Map<String, Object>) queries.get("sparse_vector_1"); |
| 179 | + List<WeightedToken> tokens = readSparseVector(queryMap.get("embeddings")); |
| 180 | + var fieldType = (SemanticTextFieldMapper.SemanticTextFieldType) mapperService.mappingLookup().getFieldType(SEMANTIC_FIELD_ELSER); |
| 181 | + SparseVectorQueryBuilder sparseQuery = new SparseVectorQueryBuilder( |
| 182 | + fieldType.getEmbeddingsField().fullPath(), |
| 183 | + tokens, |
| 184 | + null, |
| 185 | + null, |
| 186 | + null, |
| 187 | + null |
| 188 | + ); |
| 189 | + var query = new BoolQueryBuilder().should(sparseQuery).should(new MatchAllQueryBuilder()); |
| 190 | + var shardRequest = createShardSearchRequest(query); |
| 191 | + var sourceToParse = new SourceToParse("0", new BytesArray("{}"), XContentType.JSON); |
| 192 | + assertHighlightOneDoc( |
| 193 | + mapperService, |
| 194 | + shardRequest, |
| 195 | + sourceToParse, |
| 196 | + SEMANTIC_FIELD_ELSER, |
| 197 | + 10, |
| 198 | + HighlightBuilder.Order.SCORE, |
| 199 | + new String[0] |
| 200 | + ); |
| 201 | + } |
| 202 | + |
173 | 203 | private MapperService createDefaultMapperService(boolean useLegacyFormat) throws IOException { |
174 | 204 | var mappings = Streams.readFully(SemanticTextHighlighterTests.class.getResourceAsStream("mappings.json")); |
175 | 205 | var settings = Settings.builder() |
@@ -264,9 +294,13 @@ private void assertHighlightOneDoc( |
264 | 294 | new HashMap<>() |
265 | 295 | ); |
266 | 296 | var result = highlighter.highlight(context); |
267 | | - assertThat(result.fragments().length, equalTo(expectedPassages.length)); |
268 | | - for (int i = 0; i < result.fragments().length; i++) { |
269 | | - assertThat(result.fragments()[i].string(), equalTo(expectedPassages[i])); |
| 297 | + if (result == null) { |
| 298 | + assertThat(expectedPassages.length, equalTo(0)); |
| 299 | + } else { |
| 300 | + assertThat(result.fragments().length, equalTo(expectedPassages.length)); |
| 301 | + for (int i = 0; i < result.fragments().length; i++) { |
| 302 | + assertThat(result.fragments()[i].string(), equalTo(expectedPassages[i])); |
| 303 | + } |
270 | 304 | } |
271 | 305 | } |
272 | 306 | } finally { |
|
0 commit comments