3333import org .apache .lucene .util .automaton .Automaton ;
3434import org .apache .lucene .util .automaton .CompiledAutomaton ;
3535import org .apache .lucene .util .automaton .Operations ;
36+ import org .elasticsearch .cluster .metadata .IndexMetadata ;
3637import org .elasticsearch .common .Strings ;
3738import org .elasticsearch .common .lucene .Lucene ;
3839import org .elasticsearch .common .lucene .search .AutomatonQueries ;
40+ import org .elasticsearch .common .settings .Settings ;
3941import org .elasticsearch .common .unit .Fuzziness ;
4042import org .elasticsearch .common .util .BigArrays ;
4143import org .elasticsearch .core .Nullable ;
8991import java .io .IOException ;
9092import java .io .UncheckedIOException ;
9193import java .util .ArrayList ;
94+ import java .util .Arrays ;
9295import java .util .Collections ;
9396import java .util .HashMap ;
97+ import java .util .Iterator ;
9498import java .util .List ;
9599import java .util .Map ;
96100import java .util .Objects ;
@@ -285,7 +289,28 @@ public FlattenedFieldMapper build(MapperBuilderContext context) {
285289 nullValue .get (),
286290 context .isSourceSynthetic ()
287291 );
288- return new FlattenedFieldMapper (leafName (), ft , builderParams (this , context ), this );
292+
293+ // HACK:
294+ Settings settings = Settings .builder ()
295+ .put (IndexMetadata .SETTING_VERSION_CREATED , indexCreatedVersion )
296+ // .put(IndexSettings.MODE.getKey(), indexMode)
297+ .put (IndexMetadata .SETTING_NUMBER_OF_SHARDS , 1 )
298+ .put (IndexMetadata .SETTING_NUMBER_OF_REPLICAS , 1 )
299+ .build ();
300+ IndexSettings indexSettings = new IndexSettings (IndexMetadata .builder ("bla" ).settings (settings ).build (), settings );
301+ var hostName = new KeywordFieldMapper .Builder (leafName () + ".host.name" , indexSettings ).indexed (false )
302+ .docValues (true )
303+ .build (context );
304+ var serviceName = new KeywordFieldMapper .Builder (leafName () + ".service.name" , indexSettings ).indexed (false )
305+ .docValues (true )
306+ .build (context );
307+ // resource.attributes.log.file.path
308+ var logFilePath = new KeywordFieldMapper .Builder (leafName () + ".log.file.path" , indexSettings ).indexed (false )
309+ .docValues (true )
310+ .build (context );
311+ // END HACK
312+
313+ return new FlattenedFieldMapper (leafName (), ft , builderParams (this , context ), this , hostName , serviceName , logFilePath );
289314 }
290315 }
291316
@@ -1095,10 +1120,23 @@ public void validateMatchedRoutingPath(final String routingPath) {
10951120
10961121 private final FlattenedFieldParser fieldParser ;
10971122 private final Builder builder ;
1098-
1099- private FlattenedFieldMapper (String leafName , MappedFieldType mappedFieldType , BuilderParams builderParams , Builder builder ) {
1123+ private final Map <String , KeywordFieldMapper > mappedFields ;
1124+
1125+ private FlattenedFieldMapper (
1126+ String leafName ,
1127+ MappedFieldType mappedFieldType ,
1128+ BuilderParams builderParams ,
1129+ Builder builder ,
1130+ KeywordFieldMapper hostName ,
1131+ KeywordFieldMapper serviceName ,
1132+ KeywordFieldMapper logFilePath
1133+ ) {
11001134 super (leafName , mappedFieldType , builderParams );
11011135 this .builder = builder ;
1136+ this .mappedFields = new HashMap <>();
1137+ mappedFields .put (hostName .leafName ().replace (leafName + "." , "" ), hostName );
1138+ mappedFields .put (serviceName .leafName ().replace (leafName + "." , "" ), serviceName );
1139+ mappedFields .put (logFilePath .leafName ().replace (leafName + "." , "" ), logFilePath );
11021140 this .fieldParser = new FlattenedFieldParser (
11031141 mappedFieldType .name (),
11041142 mappedFieldType .name () + KEYED_FIELD_SUFFIX ,
@@ -1108,7 +1146,8 @@ private FlattenedFieldMapper(String leafName, MappedFieldType mappedFieldType, B
11081146 builder .ignoreAbove .get (),
11091147 builder .nullValue .get (),
11101148 builder .usesBinaryDocValues ,
1111- builder .storeRoot .get ()
1149+ builder .storeRoot .get (),
1150+ mappedFields
11121151 );
11131152 }
11141153
@@ -1174,6 +1213,7 @@ public FieldMapper.Builder getMergeBuilder() {
11741213 @ Override
11751214 protected SyntheticSourceSupport syntheticSourceSupport () {
11761215 if (fieldType ().hasDocValues ()) {
1216+ // TODO: include mapped fields
11771217 return new SyntheticSourceSupport .Native (
11781218 () -> new FlattenedDocValuesSyntheticFieldLoader (
11791219 fullPath (),
@@ -1187,4 +1227,9 @@ protected SyntheticSourceSupport syntheticSourceSupport() {
11871227
11881228 return super .syntheticSourceSupport ();
11891229 }
1230+
1231+ @ Override
1232+ public Iterator <Mapper > iterator () {
1233+ return mappedFields .values ().stream ().map (m -> (Mapper ) m ).iterator ();
1234+ }
11901235}
0 commit comments