@@ -125,23 +125,8 @@ public void testSkipIndexWithSortAndLowInterval() throws IOException {
125125
126126 public void testMultiRangePointTreeCollector () throws IOException {
127127 Directory dir = newDirectory ();
128- IndexWriter w = new IndexWriter (dir , new IndexWriterConfig ());
129-
130- long [] values = new long [5000 ];
131-
132- for (int i = 0 ; i < values .length ; i ++) {
133- values [i ] = random ().nextInt (0 , 5000 ); // Generates a random integer
134- }
135-
136- for (long value : values ) {
137- Document doc = new Document ();
138- // Adding indexed point field to verify multi range collector
139- doc .add (new LongPoint ("f" , value ));
140- w .addDocument (doc );
141- }
142-
143- DirectoryReader reader = DirectoryReader .open (w );
144- w .close ();
128+ long [] values = generateRandomData (5000 );
129+ DirectoryReader reader = indexNumericData (dir , values , true );
145130 IndexSearcher searcher = newSearcher (reader );
146131
147132 // Validate the MATCH_ALL case
@@ -222,6 +207,50 @@ protected String toString(int dimension, byte[] value) {
222207 dir .close ();
223208 }
224209
210+ public void testHistogramCollectorExceptionWithoutDocValues () throws IOException {
211+ Directory dir = newDirectory ();
212+ long [] values = generateRandomData (5000 );
213+ DirectoryReader reader = indexNumericData (dir , values , false );
214+ IndexSearcher searcher = newSearcher (reader );
215+
216+ // Validate that exception is thrown when doc values is disabled on numeric field
217+ expectThrows (
218+ IllegalStateException .class ,
219+ () -> searcher .search (new MatchAllDocsQuery (), new HistogramCollectorManager ("f" , 1000 )));
220+
221+ reader .close ();
222+ dir .close ();
223+ }
224+
225+ private long [] generateRandomData (int bound ) {
226+ long [] values = new long [bound ];
227+ for (int i = 0 ; i < values .length ; i ++) {
228+ values [i ] = random ().nextInt (0 , bound ); // Generates a random integer
229+ }
230+ return values ;
231+ }
232+
233+ private DirectoryReader indexNumericData (Directory dir , long [] values , boolean docValueEnabled )
234+ throws IOException {
235+ IndexWriter w = new IndexWriter (dir , new IndexWriterConfig ());
236+
237+ for (long value : values ) {
238+ Document doc = new Document ();
239+ // Adding indexed point field to verify multi range collector
240+ doc .add (new LongPoint ("f" , value ));
241+ if (docValueEnabled ) {
242+ // Doc values need to be enabled for histogram collection
243+ doc .add (new NumericDocValuesField ("f" , value ));
244+ }
245+ w .addDocument (doc );
246+ }
247+
248+ DirectoryReader reader = DirectoryReader .open (w );
249+ w .close ();
250+
251+ return reader ;
252+ }
253+
225254 private void doTestSkipIndex (IndexWriterConfig cfg ) throws IOException {
226255 Directory dir = newDirectory ();
227256 IndexWriter w = new IndexWriter (dir , cfg );
0 commit comments