Skip to content

Commit 9b9aa5f

Browse files
authored
Add the ScriptService to the field parser config (#60933)
This makes parsing runtime fields much simpler. We'd initially resisted doing this but all of our other integration options proved more troublesome.
1 parent 5e3ea6e commit 9b9aa5f

File tree

22 files changed

+73
-29
lines changed

22 files changed

+73
-29
lines changed

plugins/mapper-murmur3/src/internalClusterTest/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapperTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void setup() {
7171
return indexService.newQueryShardContext(0, null, () -> { throw new UnsupportedOperationException(); }, null);
7272
};
7373
parser = new DocumentMapperParser(indexService.getIndexSettings(), indexService.mapperService(), indexService.xContentRegistry(),
74-
indexService.similarityService(), mapperRegistry, queryShardContext);
74+
indexService.similarityService(), mapperRegistry, queryShardContext, null);
7575
}
7676

7777
@Override

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataIndexUpgradeService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ public class MetadataIndexUpgradeService {
5959
private final NamedXContentRegistry xContentRegistry;
6060
private final MapperRegistry mapperRegistry;
6161
private final IndexScopedSettings indexScopedSettings;
62+
private final ScriptService scriptService;
6263

6364
public MetadataIndexUpgradeService(Settings settings, NamedXContentRegistry xContentRegistry, MapperRegistry mapperRegistry,
64-
IndexScopedSettings indexScopedSettings) {
65+
IndexScopedSettings indexScopedSettings, ScriptService scriptService) {
6566
this.settings = settings;
6667
this.xContentRegistry = xContentRegistry;
6768
this.mapperRegistry = mapperRegistry;
6869
this.indexScopedSettings = indexScopedSettings;
70+
this.scriptService = scriptService;
6971
}
7072

7173
/**
@@ -181,7 +183,7 @@ public Set<Entry<String, NamedAnalyzer>> entrySet() {
181183
try (IndexAnalyzers fakeIndexAnalzyers =
182184
new IndexAnalyzers(analyzerMap, analyzerMap, analyzerMap)) {
183185
MapperService mapperService = new MapperService(indexSettings, fakeIndexAnalzyers, xContentRegistry, similarityService,
184-
mapperRegistry, () -> null, () -> false);
186+
mapperRegistry, () -> null, () -> false, scriptService);
185187
mapperService.merge(indexMetadata, MapperService.MergeReason.MAPPING_RECOVERY);
186188
}
187189
} catch (Exception ex) {

server/src/main/java/org/elasticsearch/index/IndexModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ public MapperService newIndexMapperService(NamedXContentRegistry xContentRegistr
505505
ScriptService scriptService) throws IOException {
506506
return new MapperService(indexSettings, analysisRegistry.build(indexSettings), xContentRegistry,
507507
new SimilarityService(indexSettings, scriptService, similarities), mapperRegistry,
508-
() -> { throw new UnsupportedOperationException("no index query shard context available"); }, () -> false);
508+
() -> { throw new UnsupportedOperationException("no index query shard context available"); }, () -> false, scriptService);
509509
}
510510

511511
/**

server/src/main/java/org/elasticsearch/index/IndexService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public IndexService(
192192
assert indexAnalyzers != null;
193193
this.mapperService = new MapperService(indexSettings, indexAnalyzers, xContentRegistry, similarityService, mapperRegistry,
194194
// we parse all percolator queries as they would be parsed on shard 0
195-
() -> newQueryShardContext(0, null, System::currentTimeMillis, null), idFieldDataEnabled);
195+
() -> newQueryShardContext(0, null, System::currentTimeMillis, null), idFieldDataEnabled, scriptService);
196196
this.indexFieldData = new IndexFieldDataService(indexSettings, indicesFieldDataCache, circuitBreakerService, mapperService);
197197
if (indexSettings.getIndexSortConfig().hasIndexSort()) {
198198
// we delay the actual creation of the sort order for this index because the mapping has not been merged yet.

server/src/main/java/org/elasticsearch/index/mapper/DocumentMapperParser.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.elasticsearch.index.query.QueryShardContext;
3434
import org.elasticsearch.index.similarity.SimilarityService;
3535
import org.elasticsearch.indices.mapper.MapperRegistry;
36+
import org.elasticsearch.script.ScriptService;
3637

3738
import java.util.Collections;
3839
import java.util.HashMap;
@@ -53,26 +54,29 @@ public class DocumentMapperParser {
5354

5455
private final Map<String, Mapper.TypeParser> typeParsers;
5556
private final Map<String, MetadataFieldMapper.TypeParser> rootTypeParsers;
57+
private final ScriptService scriptService;
5658

5759
public DocumentMapperParser(IndexSettings indexSettings, MapperService mapperService, NamedXContentRegistry xContentRegistry,
58-
SimilarityService similarityService, MapperRegistry mapperRegistry, Supplier<QueryShardContext> queryShardContextSupplier) {
60+
SimilarityService similarityService, MapperRegistry mapperRegistry,
61+
Supplier<QueryShardContext> queryShardContextSupplier, ScriptService scriptService) {
5962
this.mapperService = mapperService;
6063
this.xContentRegistry = xContentRegistry;
6164
this.similarityService = similarityService;
6265
this.queryShardContextSupplier = queryShardContextSupplier;
66+
this.scriptService = scriptService;
6367
this.typeParsers = mapperRegistry.getMapperParsers();
6468
this.indexVersionCreated = indexSettings.getIndexVersionCreated();
6569
this.rootTypeParsers = mapperRegistry.getMetadataMapperParsers(indexVersionCreated);
6670
}
6771

6872
public Mapper.TypeParser.ParserContext parserContext() {
6973
return new Mapper.TypeParser.ParserContext(similarityService::getSimilarity, mapperService,
70-
typeParsers::get, indexVersionCreated, queryShardContextSupplier, null);
74+
typeParsers::get, indexVersionCreated, queryShardContextSupplier, null, scriptService);
7175
}
7276

7377
public Mapper.TypeParser.ParserContext parserContext(DateFormatter dateFormatter) {
7478
return new Mapper.TypeParser.ParserContext(similarityService::getSimilarity, mapperService,
75-
typeParsers::get, indexVersionCreated, queryShardContextSupplier, dateFormatter);
79+
typeParsers::get, indexVersionCreated, queryShardContextSupplier, dateFormatter, scriptService);
7680
}
7781

7882
public DocumentMapper parse(@Nullable String type, CompressedXContent source) throws MapperParsingException {

server/src/main/java/org/elasticsearch/index/mapper/Mapper.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.elasticsearch.index.analysis.IndexAnalyzers;
2727
import org.elasticsearch.index.query.QueryShardContext;
2828
import org.elasticsearch.index.similarity.SimilarityProvider;
29+
import org.elasticsearch.script.ScriptService;
2930

3031
import java.util.Map;
3132
import java.util.Objects;
@@ -91,16 +92,19 @@ class ParserContext {
9192

9293
private final DateFormatter dateFormatter;
9394

95+
private final ScriptService scriptService;
96+
9497
public ParserContext(Function<String, SimilarityProvider> similarityLookupService,
9598
MapperService mapperService, Function<String, TypeParser> typeParsers,
9699
Version indexVersionCreated, Supplier<QueryShardContext> queryShardContextSupplier,
97-
DateFormatter dateFormatter) {
100+
DateFormatter dateFormatter, ScriptService scriptService) {
98101
this.similarityLookupService = similarityLookupService;
99102
this.mapperService = mapperService;
100103
this.typeParsers = typeParsers;
101104
this.indexVersionCreated = indexVersionCreated;
102105
this.queryShardContextSupplier = queryShardContextSupplier;
103106
this.dateFormatter = dateFormatter;
107+
this.scriptService = scriptService;
104108
}
105109

106110
public IndexAnalyzers getIndexAnalyzers() {
@@ -146,14 +150,21 @@ public DateFormatter getDateFormatter() {
146150

147151
protected Function<String, SimilarityProvider> similarityLookupService() { return similarityLookupService; }
148152

153+
/**
154+
* The {@linkplain ScriptService} to compile scripts needed by the {@linkplain Mapper}.
155+
*/
156+
public ScriptService scriptService() {
157+
return scriptService;
158+
}
159+
149160
public ParserContext createMultiFieldContext(ParserContext in) {
150161
return new MultiFieldParserContext(in);
151162
}
152163

153164
static class MultiFieldParserContext extends ParserContext {
154165
MultiFieldParserContext(ParserContext in) {
155166
super(in.similarityLookupService(), in.mapperService(), in.typeParsers(),
156-
in.indexVersionCreated(), in.queryShardContextSupplier(), in.getDateFormatter());
167+
in.indexVersionCreated(), in.queryShardContextSupplier(), in.getDateFormatter(), in.scriptService());
157168
}
158169

159170
@Override

server/src/main/java/org/elasticsearch/index/mapper/MapperService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.elasticsearch.index.similarity.SimilarityService;
5252
import org.elasticsearch.indices.IndicesModule;
5353
import org.elasticsearch.indices.mapper.MapperRegistry;
54+
import org.elasticsearch.script.ScriptService;
5455

5556
import java.io.Closeable;
5657
import java.io.IOException;
@@ -125,12 +126,13 @@ public enum MergeReason {
125126

126127
public MapperService(IndexSettings indexSettings, IndexAnalyzers indexAnalyzers, NamedXContentRegistry xContentRegistry,
127128
SimilarityService similarityService, MapperRegistry mapperRegistry,
128-
Supplier<QueryShardContext> queryShardContextSupplier, BooleanSupplier idFieldDataEnabled) {
129+
Supplier<QueryShardContext> queryShardContextSupplier, BooleanSupplier idFieldDataEnabled,
130+
ScriptService scriptService) {
129131
super(indexSettings);
130132
this.indexVersionCreated = indexSettings.getIndexVersionCreated();
131133
this.indexAnalyzers = indexAnalyzers;
132134
this.documentParser = new DocumentMapperParser(indexSettings, this, xContentRegistry, similarityService, mapperRegistry,
133-
queryShardContextSupplier);
135+
queryShardContextSupplier, scriptService);
134136
this.indexAnalyzer = new MapperAnalyzerWrapper(indexAnalyzers.getDefaultIndexAnalyzer(), MappedFieldType::indexAnalyzer);
135137
this.searchAnalyzer = new MapperAnalyzerWrapper(indexAnalyzers.getDefaultSearchAnalyzer(),
136138
p -> p.getTextSearchInfo().getSearchAnalyzer());

server/src/main/java/org/elasticsearch/node/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ protected Node(final Environment initialEnvironment,
528528
.collect(Collectors.toList());
529529
final MetadataUpgrader metadataUpgrader = new MetadataUpgrader(indexTemplateMetadataUpgraders);
530530
final MetadataIndexUpgradeService metadataIndexUpgradeService = new MetadataIndexUpgradeService(settings, xContentRegistry,
531-
indicesModule.getMapperRegistry(), settingsModule.getIndexScopedSettings());
531+
indicesModule.getMapperRegistry(), settingsModule.getIndexScopedSettings(), scriptService);
532532
new TemplateUpgradeService(client, clusterService, threadPool, indexTemplateMetadataUpgraders);
533533
final Transport transport = networkModule.getTransportSupplier().get();
534534
Set<String> taskHeaders = Stream.concat(

server/src/test/java/org/elasticsearch/cluster/metadata/MetadataIndexUpgradeServiceTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ private MetadataIndexUpgradeService getMetadataIndexUpgradeService() {
137137
Settings.EMPTY,
138138
xContentRegistry(),
139139
new MapperRegistry(Collections.emptyMap(), Collections.emptyMap(), MapperPlugin.NOOP_FIELD_FILTER),
140-
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
140+
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, null);
141141
}
142142

143143
public static IndexMetadata newIndexMeta(String name, Settings indexSettings) {

server/src/test/java/org/elasticsearch/gateway/GatewayMetaStateTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ private static class MockMetadataIndexUpgradeService extends MetadataIndexUpgrad
159159
private final boolean upgrade;
160160

161161
MockMetadataIndexUpgradeService(boolean upgrade) {
162-
super(Settings.EMPTY, null, null, null);
162+
super(Settings.EMPTY, null, null, null, null);
163163
this.upgrade = upgrade;
164164
}
165165

0 commit comments

Comments
 (0)