@@ -61,8 +61,20 @@ public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float bo
6161
6262 @ Override
6363 public ScorerSupplier scorerSupplier (LeafReaderContext context ) throws IOException {
64- int maxDoc = context .reader ().maxDoc ();
65- var timestampSkipper = context .reader ().getDocValuesSkipper (FIELD_NAME );
64+ var reader = context .reader ();
65+ int maxDoc = reader .maxDoc ();
66+ if (maxDoc == 0 ) {
67+ return null ;
68+ }
69+ if (reader .getFieldInfos ().fieldInfo (FIELD_NAME ) == null ) {
70+ return null ;
71+ }
72+
73+ Sort indexSort = reader .getMetaData ().sort ();
74+ assert indexSort != null ;
75+ assert indexSort .getSort ().length == 1 || indexSort .getSort ().length == 2 ;
76+
77+ var timestampSkipper = reader .getDocValuesSkipper (FIELD_NAME );
6678 assert timestampSkipper != null ;
6779 if (timestampSkipper .minValue () > maxTimestamp || timestampSkipper .maxValue () < minTimestamp ) {
6880 return null ;
@@ -71,14 +83,10 @@ public ScorerSupplier scorerSupplier(LeafReaderContext context) throws IOExcepti
7183 return ConstantScoreScorerSupplier .matchAll (score (), scoreMode , maxDoc );
7284 }
7385
74- Sort indexSort = context .reader ().getMetaData ().sort ();
75- assert indexSort != null ;
76- assert indexSort .getSort ().length == 1 || indexSort .getSort ().length == 2 ;
77- String primarySortField = indexSort .getSort ()[0 ].getField ();
78-
7986 var timestamps = getNumericDocValues (context );
87+ String primarySortField = indexSort .getSort ()[0 ].getField ();
8088 boolean timestampIsPrimarySort = primarySortField .equals (FIELD_NAME );
81- var primaryFieldValues = timestampIsPrimarySort ? null : context . reader () .getSortedDocValues (primarySortField );
89+ var primaryFieldValues = timestampIsPrimarySort ? null : reader .getSortedDocValues (primarySortField );
8290 if (primaryFieldValues == null || primaryFieldValues .getValueCount () <= 1 ) {
8391 var iterator = getIteratorIfTimestampIfPrimarySort (maxDoc , timestamps , timestampSkipper , minTimestamp , maxTimestamp );
8492 return ConstantScoreScorerSupplier .fromIterator (iterator , score (), scoreMode , maxDoc );
@@ -95,7 +103,7 @@ public float matchCost() {
95103 return 2 ; // 2 comparisons
96104 }
97105 };
98- var primaryFieldSkipper = context . reader () .getDocValuesSkipper (primarySortField );
106+ var primaryFieldSkipper = reader .getDocValuesSkipper (primarySortField );
99107 iterator = new TimestampIterator (iterator , timestampSkipper , primaryFieldSkipper , minTimestamp , maxTimestamp );
100108 return ConstantScoreScorerSupplier .fromIterator (TwoPhaseIterator .asDocIdSetIterator (iterator ), score (), scoreMode , maxDoc );
101109 }
@@ -143,7 +151,7 @@ static NumericDocValues getNumericDocValues(LeafReaderContext ctx) throws IOExce
143151 var timestampValues = DocValues .getSortedNumeric (ctx .reader (), FIELD_NAME );
144152 assert timestampValues != null ;
145153 var timestampSingleton = DocValues .unwrapSingleton (timestampValues );
146- assert timestampSingleton != null ;
154+ assert timestampSingleton != null : "@timestamp has multiple values per document" ;
147155 return timestampSingleton ;
148156 }
149157
0 commit comments