@@ -418,7 +418,6 @@ public IndexShard(
418418 this .refreshFieldHasValueListener = new RefreshFieldHasValueListener ();
419419 this .relativeTimeInNanosSupplier = relativeTimeInNanosSupplier ;
420420 this .indexCommitListener = indexCommitListener ;
421- this .fieldInfos = FieldInfos .EMPTY ;
422421 }
423422
424423 public ThreadPool getThreadPool () {
@@ -1025,7 +1024,11 @@ public void setFieldInfos(FieldInfos fieldInfos) {
10251024 }
10261025
10271026 public FieldInfos getFieldInfos () {
1028- return fieldInfos ;
1027+ var res = fieldInfos ;
1028+ if (res == null ) {
1029+ return loadFieldInfos ();
1030+ }
1031+ return res ;
10291032 }
10301033
10311034 public static Engine .Index prepareIndex (
@@ -4131,16 +4134,23 @@ public void beforeRefresh() {}
41314134
41324135 @ Override
41334136 public void afterRefresh (boolean didRefresh ) {
4134- if (enableFieldHasValue && (didRefresh || fieldInfos == FieldInfos .EMPTY )) {
4135- try (Engine .Searcher hasValueSearcher = getEngine ().acquireSearcher ("field_has_value" )) {
4136- setFieldInfos (FieldInfos .getMergedFieldInfos (hasValueSearcher .getIndexReader ()));
4137- } catch (AlreadyClosedException ignore ) {
4138- // engine is closed - no updated FieldInfos is fine
4139- }
4137+ if (enableFieldHasValue && (didRefresh || fieldInfos == null )) {
4138+ loadFieldInfos ();
41404139 }
41414140 }
41424141 }
41434142
4143+ private FieldInfos loadFieldInfos () {
4144+ try (Engine .Searcher hasValueSearcher = getEngine ().acquireSearcher ("field_has_value" )) {
4145+ var res = FieldInfos .getMergedFieldInfos (hasValueSearcher .getIndexReader ());
4146+ setFieldInfos (res );
4147+ return res ;
4148+ } catch (AlreadyClosedException ignore ) {
4149+ // engine is closed - no update to3 FieldInfos is fine
4150+ }
4151+ return FieldInfos .EMPTY ;
4152+ }
4153+
41444154 /**
41454155 * Returns the shard-level field stats, which includes the number of segments in the latest NRT reader of this shard
41464156 * and the total number of fields across those segments.
0 commit comments