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