@@ -589,4 +589,95 @@ private void testCase(AvgAggregationBuilder aggregationBuilder, Query query,
589
589
indexReader .close ();
590
590
directory .close ();
591
591
}
592
+
593
+ /**
594
+ * Make sure that an aggregation not using a script does get cached.
595
+ */
596
+ public void testCacheAggregation () throws IOException {
597
+ Directory directory = newDirectory ();
598
+ RandomIndexWriter indexWriter = new RandomIndexWriter (random (), directory );
599
+ final int numDocs = 10 ;
600
+ for (int i = 0 ; i < numDocs ; i ++) {
601
+ indexWriter .addDocument (singleton (new NumericDocValuesField ("value" , i + 1 )));
602
+ }
603
+ indexWriter .close ();
604
+
605
+ Directory unmappedDirectory = newDirectory ();
606
+ RandomIndexWriter unmappedIndexWriter = new RandomIndexWriter (random (), unmappedDirectory );
607
+ unmappedIndexWriter .close ();
608
+
609
+ IndexReader indexReader = DirectoryReader .open (directory );
610
+ IndexReader unamappedIndexReader = DirectoryReader .open (unmappedDirectory );
611
+ MultiReader multiReader = new MultiReader (indexReader , unamappedIndexReader );
612
+ IndexSearcher indexSearcher = newSearcher (multiReader , true , true );
613
+
614
+ MappedFieldType fieldType = new NumberFieldMapper .NumberFieldType (NumberFieldMapper .NumberType .INTEGER );
615
+ fieldType .setName ("value" );
616
+ AvgAggregationBuilder aggregationBuilder = new AvgAggregationBuilder ("avg" )
617
+ .field ("value" );
618
+
619
+ AvgAggregator aggregator = createAggregator (aggregationBuilder , indexSearcher , fieldType );
620
+ aggregator .preCollection ();
621
+ indexSearcher .search (new MatchAllDocsQuery (), aggregator );
622
+ aggregator .postCollection ();
623
+
624
+ InternalAvg avg = (InternalAvg ) aggregator .buildAggregation (0L );
625
+
626
+ assertEquals (5.5 , avg .getValue (), 0 );
627
+ assertEquals ("avg" , avg .getName ());
628
+ assertTrue (AggregationInspectionHelper .hasValue (avg ));
629
+
630
+ // Test that an aggregation not using a script does get cached
631
+ assertTrue (aggregator .context ().getQueryShardContext ().isCacheable ());
632
+
633
+ multiReader .close ();
634
+ directory .close ();
635
+ unmappedDirectory .close ();
636
+ }
637
+
638
+ /**
639
+ * Make sure that an aggregation using a script does not get cached.
640
+ */
641
+ public void testDontCacheScripts () throws IOException {
642
+ Directory directory = newDirectory ();
643
+ RandomIndexWriter indexWriter = new RandomIndexWriter (random (), directory );
644
+ final int numDocs = 10 ;
645
+ for (int i = 0 ; i < numDocs ; i ++) {
646
+ indexWriter .addDocument (singleton (new NumericDocValuesField ("value" , i + 1 )));
647
+ }
648
+ indexWriter .close ();
649
+
650
+ Directory unmappedDirectory = newDirectory ();
651
+ RandomIndexWriter unmappedIndexWriter = new RandomIndexWriter (random (), unmappedDirectory );
652
+ unmappedIndexWriter .close ();
653
+
654
+ IndexReader indexReader = DirectoryReader .open (directory );
655
+ IndexReader unamappedIndexReader = DirectoryReader .open (unmappedDirectory );
656
+ MultiReader multiReader = new MultiReader (indexReader , unamappedIndexReader );
657
+ IndexSearcher indexSearcher = newSearcher (multiReader , true , true );
658
+
659
+ MappedFieldType fieldType = new NumberFieldMapper .NumberFieldType (NumberFieldMapper .NumberType .INTEGER );
660
+ fieldType .setName ("value" );
661
+ AvgAggregationBuilder aggregationBuilder = new AvgAggregationBuilder ("avg" )
662
+ .field ("value" )
663
+ .script (new Script (ScriptType .INLINE , MockScriptEngine .NAME , VALUE_SCRIPT , Collections .emptyMap ()));
664
+
665
+ AvgAggregator aggregator = createAggregator (aggregationBuilder , indexSearcher , fieldType );
666
+ aggregator .preCollection ();
667
+ indexSearcher .search (new MatchAllDocsQuery (), aggregator );
668
+ aggregator .postCollection ();
669
+
670
+ InternalAvg avg = (InternalAvg ) aggregator .buildAggregation (0L );
671
+
672
+ assertEquals (5.5 , avg .getValue (), 0 );
673
+ assertEquals ("avg" , avg .getName ());
674
+ assertTrue (AggregationInspectionHelper .hasValue (avg ));
675
+
676
+ // Test that an aggregation using a script does not get cached
677
+ assertFalse (aggregator .context ().getQueryShardContext ().isCacheable ());
678
+
679
+ multiReader .close ();
680
+ directory .close ();
681
+ unmappedDirectory .close ();
682
+ }
592
683
}
0 commit comments