Skip to content

Commit 770ad5d

Browse files
committed
Some cleanup and tune params
1 parent 63098b0 commit 770ad5d

File tree

4 files changed

+40
-51
lines changed

4 files changed

+40
-51
lines changed

test/framework/src/main/java/org/elasticsearch/datageneration/datasource/DefaultMappingParametersHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,13 @@ private Supplier<Map<String, Object>> keywordMapping(boolean hasParent, DataSour
9898
}
9999
}
100100

101-
if (ESTestCase.randomDouble() <= 0.2) {
101+
if (ESTestCase.randomDouble() <= 0.3) {
102102
mapping.put("ignore_above", ESTestCase.randomIntBetween(1, 50));
103103
}
104104
if (ESTestCase.randomDouble() <= 0.2) {
105105
mapping.put("null_value", ESTestCase.randomAlphaOfLengthBetween(0, 10));
106106
}
107-
if (hasParent == false && ESTestCase.randomDouble() <= 0.3) {
107+
if (hasParent == false && ESTestCase.randomBoolean()) {
108108
mapping.put("fields", stringSubField(request));
109109
}
110110

@@ -208,7 +208,7 @@ private Supplier<Map<String, Object>> textMapping(boolean hasParent, DataSourceR
208208
mapping.put("store", ESTestCase.randomBoolean());
209209
mapping.put("index", ESTestCase.randomBoolean());
210210

211-
if (hasParent == false && ESTestCase.randomDouble() <= 0.3) {
211+
if (hasParent == false && ESTestCase.randomBoolean()) {
212212
mapping.put("fields", stringSubField(request));
213213
}
214214

@@ -248,13 +248,13 @@ private Supplier<Map<String, Object>> wildcardMapping(boolean hasParent, DataSou
248248
return () -> {
249249
var mapping = new HashMap<String, Object>();
250250

251-
if (ESTestCase.randomDouble() <= 0.2) {
251+
if (ESTestCase.randomDouble() <= 0.3) {
252252
mapping.put("ignore_above", ESTestCase.randomIntBetween(1, 50));
253253
}
254254
if (ESTestCase.randomDouble() <= 0.2) {
255255
mapping.put("null_value", ESTestCase.randomAlphaOfLengthBetween(0, 10));
256256
}
257-
if (hasParent == false && ESTestCase.randomDouble() <= 0.3) {
257+
if (hasParent == false && ESTestCase.randomBoolean()) {
258258
mapping.put("fields", stringSubField(request));
259259
}
260260

@@ -268,7 +268,7 @@ private Supplier<Map<String, Object>> matchOnlyTextMapping(
268268
) {
269269
return () -> {
270270
var mapping = new HashMap<String, Object>();
271-
if (hasParent == false && ESTestCase.randomDouble() <= 0.3) {
271+
if (hasParent == false && ESTestCase.randomBoolean()) {
272272
mapping.put("fields", stringSubField(request));
273273
}
274274
return mapping;

test/framework/src/main/java/org/elasticsearch/datageneration/queries/LeafQueryGenerator.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,10 @@
99

1010
package org.elasticsearch.datageneration.queries;
1111

12-
import org.elasticsearch.common.MacAddressProvider;
1312
import org.elasticsearch.datageneration.FieldType;
1413
import org.elasticsearch.index.query.QueryBuilder;
1514
import org.elasticsearch.index.query.QueryBuilders;
16-
import org.elasticsearch.test.ESTestCase;
1715

18-
import java.util.ArrayList;
19-
import java.util.Arrays;
2016
import java.util.List;
2117
import java.util.Map;
2218

@@ -29,7 +25,7 @@ public interface LeafQueryGenerator {
2925
* @param type the type to build a query for
3026
* @return a generator that can build queries for this type
3127
*/
32-
static LeafQueryGenerator buildForType(String type, MappingContextHelper mappingContextHelper) {
28+
static LeafQueryGenerator buildForType(String type, MappingPredicates mappingContextHelper) {
3329
LeafQueryGenerator noQueries = (Map<String, Object> fieldMapping, String path, Object value) -> List.of();
3430

3531
FieldType fieldType = FieldType.tryParse(type);
@@ -89,12 +85,12 @@ public List<QueryBuilder> generate(Map<String, Object> fieldMapping, String path
8985
}
9086
}
9187

92-
record MatchOnlyTextQueryGenerator(MappingContextHelper mappingContextHelper) implements LeafQueryGenerator {
88+
record MatchOnlyTextQueryGenerator(MappingPredicates mappingPredicates) implements LeafQueryGenerator {
9389

9490
public List<QueryBuilder> generate(Map<String, Object> fieldMapping, String path, Object value) {
9591
// TODO remove when fixed
9692
// match_only_text in nested context fails for synthetic source https://github.com/elastic/elasticsearch/issues/132352
97-
if (mappingContextHelper.inNestedContext(path)) {
93+
if (mappingPredicates.inNestedContext(path)) {
9894
return List.of(QueryBuilders.matchQuery(path, value));
9995
}
10096

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,59 +16,53 @@
1616
import java.util.List;
1717
import java.util.Map;
1818

19-
public class MappingContextHelper {
19+
public class MappingPredicates {
2020

2121
private final Mapping mapping;
2222

23-
public MappingContextHelper(Mapping mapping) {
23+
public MappingPredicates(Mapping mapping) {
2424
this.mapping = mapping;
2525
}
2626

27-
@SuppressWarnings("unchecked")
28-
public List<String> getNestedPathPrefixes(String[] path) {
29-
Map<String, Object> mapping = this.mapping.raw();
30-
mapping = (Map<String, Object>) mapping.get("_doc");
31-
mapping = (Map<String, Object>) mapping.get("properties");
32-
33-
var result = new ArrayList<String>();
34-
for (int i = 0; i < path.length - 1; i++) {
35-
var field = path[i];
36-
mapping = (Map<String, Object>) mapping.get(field);
27+
record PathMapping(String path, Map<String, Object> mapping) {}
3728

38-
// dynamic field
39-
if (mapping == null) {
29+
private List<PathMapping> getPathMapping(String path) {
30+
String[] parts = path.split("\\.");
31+
var result = new ArrayList<PathMapping>();
32+
for (int i = 0; i < parts.length; i++) {
33+
var pathToHere = String.join(".", Arrays.copyOfRange(parts, 0, i + 1));
34+
Map<String, Object> fieldMapping = mapping.lookup().get(pathToHere);
35+
if (fieldMapping == null) {
4036
break;
4137
}
42-
43-
boolean nested = "nested".equals(mapping.get("type"));
44-
if (nested) {
45-
result.add(String.join(".", Arrays.copyOfRange(path, 0, i + 1)));
46-
}
47-
mapping = (Map<String, Object>) mapping.get("properties");
38+
result.add(new PathMapping(pathToHere, fieldMapping));
4839
}
4940
return result;
5041
}
5142

43+
public List<String> getNestedPathPrefixes(String fullPath) {
44+
return getPathMapping(fullPath).stream()
45+
.filter(pm -> "nested".equals(pm.mapping().get("type")))
46+
.map(PathMapping::path)
47+
.toList();
48+
}
49+
50+
public boolean inNestedContext(String fullPath) {
51+
return getPathMapping(fullPath).stream()
52+
.anyMatch(pm -> "nested".equals(pm.mapping().get("type")));
53+
}
54+
5255
@SuppressWarnings("unchecked")
5356
public boolean isRuntimeField(String path) {
54-
String[] parts = path.split("\\.");
5557
var topLevelMapping = (Map<String, Object>) mapping.raw().get("_doc");
5658
boolean inRuntimeContext = "runtime".equals(topLevelMapping.get("dynamic"));
57-
for (int i = 0; i < parts.length - 1; i++) {
58-
var pathToHere = String.join(".", Arrays.copyOfRange(parts, 0, i + 1));
59-
Map<String, Object> fieldMapping = mapping.lookup().get(pathToHere);
60-
if (fieldMapping == null) {
61-
break;
62-
}
63-
if (fieldMapping.containsKey("dynamic")) {
59+
for (var pm : getPathMapping(path)) {
60+
if (pm.mapping().containsKey("dynamic")) {
6461
// lower down dynamic definitions override higher up behavior
65-
inRuntimeContext = "runtime".equals(fieldMapping.get("dynamic"));
62+
inRuntimeContext = "runtime".equals(pm.mapping().get("dynamic"));
6663
}
6764
}
6865
return inRuntimeContext;
6966
}
7067

71-
public boolean inNestedContext(String path) {
72-
return getNestedPathPrefixes(path.split("\\.")).isEmpty() == false;
73-
}
7468
}

test/framework/src/main/java/org/elasticsearch/datageneration/queries/QueryGenerator.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
public class QueryGenerator {
2020

2121
private final Mapping mapping;
22-
private final MappingContextHelper mappingContextHelper;
22+
private final MappingPredicates mappingPredicates;
2323

2424
public QueryGenerator(Mapping mapping) {
2525
this.mapping = mapping;
26-
this.mappingContextHelper = new MappingContextHelper(mapping);
26+
this.mappingPredicates = new MappingPredicates(mapping);
2727
}
2828

2929
public List<QueryBuilder> generateQueries(String type, String path, Object value) {
@@ -32,18 +32,17 @@ public List<QueryBuilder> generateQueries(String type, String path, Object value
3232
return List.of();
3333
}
3434
// Can handle dynamically mapped fields, but not runtime fields
35-
if (mappingContextHelper.isRuntimeField(path)) {
35+
if (mappingPredicates.isRuntimeField(path)) {
3636
return List.of();
3737
}
38-
var leafQueryGenerator = LeafQueryGenerator.buildForType(type, mappingContextHelper);
38+
var leafQueryGenerator = LeafQueryGenerator.buildForType(type, mappingPredicates);
3939
var fieldMapping = mapping.lookup().get(path);
4040
var leafQueries = leafQueryGenerator.generate(fieldMapping, path, value);
4141
return leafQueries.stream().map(q -> wrapInNestedQuery(path, q)).toList();
4242
}
4343

4444
private QueryBuilder wrapInNestedQuery(String path, QueryBuilder leafQuery) {
45-
String[] parts = path.split("\\.");
46-
List<String> nestedPaths = mappingContextHelper.getNestedPathPrefixes(parts);
45+
List<String> nestedPaths = mappingPredicates.getNestedPathPrefixes(path);
4746
QueryBuilder query = leafQuery;
4847
for (String nestedPath : nestedPaths.reversed()) {
4948
query = QueryBuilders.nestedQuery(nestedPath, query, ScoreMode.Max);

0 commit comments

Comments
 (0)