Skip to content

Commit 6fe6247

Browse files
Parth-VaderChristoph Büscher
authored and
Christoph Büscher
committed
Ignore script fields when size is 0 (elastic#31917)
This change adds a check so that when parsing the search source, script fields are ignored when the requested search result size is 0. This helps with e.g. clients like Kibana that sends a list of script fields that they may need for convenience, but they don't require any hits. Before this change, user sometimes ran into confusing behaviour, e.g. the script compilation limit to breaking although no hits were requested. Closes elastic#31824
1 parent ab81078 commit 6fe6247

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

server/src/main/java/org/elasticsearch/search/SearchService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ private void parseSource(DefaultSearchContext context, SearchSourceBuilder sourc
806806
throw new SearchContextException(context, "failed to create SearchContextHighlighter", e);
807807
}
808808
}
809-
if (source.scriptFields() != null) {
809+
if (source.scriptFields() != null && source.size() != 0) {
810810
int maxAllowedScriptFields = context.mapperService().getIndexSettings().getMaxScriptFields();
811811
if (source.scriptFields().size() > maxAllowedScriptFields) {
812812
throw new IllegalArgumentException(

server/src/test/java/org/elasticsearch/search/SearchServiceTests.java

+17
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,23 @@ searchSourceBuilder, new String[0], false, new AliasFilter(null, Strings.EMPTY_A
345345
}
346346
}
347347

348+
public void testIgnoreScriptfieldIfSizeZero() throws IOException {
349+
createIndex("index");
350+
final SearchService service = getInstanceFromNode(SearchService.class);
351+
final IndicesService indicesService = getInstanceFromNode(IndicesService.class);
352+
final IndexService indexService = indicesService.indexServiceSafe(resolveIndex("index"));
353+
final IndexShard indexShard = indexService.getShard(0);
354+
355+
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
356+
searchSourceBuilder.scriptField("field" + 0,
357+
new Script(ScriptType.INLINE, MockScriptEngine.NAME, CustomScriptPlugin.DUMMY_SCRIPT, Collections.emptyMap()));
358+
searchSourceBuilder.size(0);
359+
try (SearchContext context = service.createContext(new ShardSearchLocalRequest(indexShard.shardId(), 1, SearchType.DEFAULT,
360+
searchSourceBuilder, new String[0], false, new AliasFilter(null, Strings.EMPTY_ARRAY), 1.0f, true, null, null))) {
361+
assertEquals(0, context.scriptFields().fields().size());
362+
}
363+
}
364+
348365
public static class FailOnRewriteQueryPlugin extends Plugin implements SearchPlugin {
349366
@Override
350367
public List<QuerySpec<?>> getQueries() {

0 commit comments

Comments
 (0)