@@ -35,20 +35,20 @@ protected Object expected(Map<String, Object> fieldMapping, Object value, TestCo
3535 var fields = (Map <String , Object >) fieldMapping .get ("fields" );
3636 if (fields != null ) {
3737 var keywordMultiFieldMapping = (Map <String , Object >) fields .get ("kwd" );
38+ Object normalizer = fields .get ("normalizer" );
3839 boolean docValues = hasDocValues (keywordMultiFieldMapping , true );
39- boolean index = keywordMultiFieldMapping .getOrDefault ("index" , true ).equals (true );
4040 boolean store = keywordMultiFieldMapping .getOrDefault ("store" , false ).equals (true );
4141 Object ignoreAbove = keywordMultiFieldMapping .get ("ignore_above" );
4242
43- // See TextFieldMapper.SyntheticSourceHelper#usingSyntheticSourceDelegate
43+ // See TextFieldMapper.SyntheticSourceHelper#getKeywordFieldMapperForSyntheticSource
4444 // and TextFieldMapper#canUseSyntheticSourceDelegateForLoading().
45- boolean usingSyntheticSourceDelegate = docValues || store ;
46- boolean canUseSyntheticSourceDelegateForLoading = usingSyntheticSourceDelegate && ignoreAbove == null && ( index || store ) ;
45+ boolean usingSyntheticSourceDelegate = normalizer == null && ( docValues || store ) ;
46+ boolean canUseSyntheticSourceDelegateForLoading = usingSyntheticSourceDelegate && ignoreAbove == null ;
4747 if (canUseSyntheticSourceDelegateForLoading ) {
4848 return KeywordFieldBlockLoaderTests .expectedValue (keywordMultiFieldMapping , value , params , testContext );
4949 }
5050
51- // Even if multi- field is not eligible for loading it can still be used to produce synthetic source
51+ // Even if multi field is not eligible for loading it can still be used to produce synthetic source
5252 // and then we load from the synthetic source.
5353 // Synthetic source is actually different from keyword field block loader results
5454 // because synthetic source includes values exceeding ignore_above and block loader doesn't.
@@ -66,9 +66,7 @@ protected Object expected(Map<String, Object> fieldMapping, Object value, TestCo
6666 boolean textFieldIndexed = (boolean ) fieldMapping .getOrDefault ("index" , true );
6767
6868 if (value == null ) {
69- if (textFieldIndexed == false
70- && nullValue != null
71- && (ignoreAbove == null || nullValue .length () <= (int ) ignoreAbove )) {
69+ if (textFieldIndexed == false && nullValue != null && nullValue .length () <= (int ) ignoreAbove ) {
7270 return new BytesRef (nullValue );
7371 }
7472
@@ -89,7 +87,7 @@ protected Object expected(Map<String, Object> fieldMapping, Object value, TestCo
8987 var indexed = values .stream ()
9088 .map (s -> s == null ? nullValue : s )
9189 .filter (Objects ::nonNull )
92- .filter (s -> ignoreAbove == null || s .length () <= (int ) ignoreAbove )
90+ .filter (s -> s .length () <= (int ) ignoreAbove )
9391 .map (BytesRef ::new )
9492 .collect (Collectors .toList ());
9593
@@ -100,22 +98,20 @@ protected Object expected(Map<String, Object> fieldMapping, Object value, TestCo
10098 }
10199
102100 // ignored values always come last
103- List <BytesRef > ignored = ignoreAbove == null
104- ? List .of ()
105- : values .stream ()
106- .map (s -> s == null ? nullValue : s )
107- .filter (Objects ::nonNull )
108- .filter (s -> s .length () > (int ) ignoreAbove )
109- .map (BytesRef ::new )
110- .toList ();
101+ List <BytesRef > ignored = values .stream ()
102+ .map (s -> s == null ? nullValue : s )
103+ .filter (Objects ::nonNull )
104+ .filter (s -> s .length () > (int ) ignoreAbove )
105+ .map (BytesRef ::new )
106+ .toList ();
111107
112108 indexed .addAll (ignored );
113109
114110 return maybeFoldList (indexed );
115111 }
116112 }
117113
118- // Loading from _ignored_source or stored _source
114+ // Loading from stored field, _ignored_source or stored _source
119115 return valuesInSourceOrder (value );
120116 }
121117
0 commit comments