Skip to content

Combining filter rewrite and skip list to optimize sub aggregation#19573

Merged
jainankitk merged 38 commits intoopensearch-project:mainfrom
jainankitk:agg-perf
Dec 2, 2025
Merged

Combining filter rewrite and skip list to optimize sub aggregation#19573
jainankitk merged 38 commits intoopensearch-project:mainfrom
jainankitk:agg-perf

Conversation

@jainankitk
Copy link
Copy Markdown
Contributor

@jainankitk jainankitk commented Oct 8, 2025

Description

This change aims at optimizing the sub aggregation by leveraging multi range traversal for top level aggregation, and skip list for the sub aggregation. This optimization helps improve the performance for such aggregation requests upto 10x (needs sorting on field for which skip list is utilized). Queries range-auto-date-histo and range-auto-date-histo-metrics from the big5 benchmark workload should directly benefit from this optimization once change is extended for auto histogram aggregations as well - #20057

I have copied over the BitSetDocIdStream class in OpenSearch from Lucene for now as it is not public, but should look at eventually getting rid of it. Copying over BitSetDocIdStream was resulting in 3 implementations of DocIdStream making some of the calls polymorphic. Hence, instead added helper class to initialize BitSetDocIdStream in the lucene namespace. We have followed the same pattern for few other extensions in Lucene

Related Issues

Related to #17447, #19384

Check List

  • Functionality includes testing.
  • [ ] API changes companion pull request created, if applicable.
  • [ ] Public documentation issue/PR created, if applicable.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Summary by CodeRabbit

  • New Features

    • Enhanced aggregation sub-processing with combined optimization strategies for improved performance in histogram and range aggregations.
  • Tests

    • Added test coverage for skiplist-optimized collection with range and date histogram sub-aggregations across multiple segments.

✏️ Tip: You can customize this high-level summary in your review settings.

…ing sub aggregation

Signed-off-by: Ankit Jain <jainankitk@apache.org>
Signed-off-by: Ankit Jain <jainankitk@apache.org>
@jainankitk jainankitk changed the title Combining filter rewrite and skip list approaches for further optimiz… Combining filter rewrite and skip list to optimize sub aggregation Oct 8, 2025
Signed-off-by: Ankit Jain <jainankitk@apache.org>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Oct 8, 2025

❌ Gradle check result for 82bc95d: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

Signed-off-by: Ankit Jain <jainankitk@apache.org>
@jainankitk jainankitk marked this pull request as ready for review October 9, 2025 00:04
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Oct 9, 2025

❌ Gradle check result for aff3dc6: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

Signed-off-by: Ankit Jain <jainankitk@apache.org>
@opensearch-ci-bot
Copy link
Copy Markdown
Collaborator

Benchmark Baseline Comparison Results

Benchmark Results for Job: https://build.ci.opensearch.org/job/benchmark-compare/213/

Metric Task Baseline Contender Diff Unit
Cumulative indexing time of primary shards 0 0 0 min
Min cumulative indexing time across primary shard 0 0 0 min
Median cumulative indexing time across primary shard 0 0 0 min
Max cumulative indexing time across primary shard 0 0 0 min
Cumulative indexing throttle time of primary shards 0 0 0 min
Min cumulative indexing throttle time across primary shard 0 0 0 min
Median cumulative indexing throttle time across primary shard 0 0 0 min
Max cumulative indexing throttle time across primary shard 0 0 0 min
Cumulative merge time of primary shards 0 0 0 min
Cumulative merge count of primary shards 0 0 0
Min cumulative merge time across primary shard 0 0 0 min
Median cumulative merge time across primary shard 0 0 0 min
Max cumulative merge time across primary shard 0 0 0 min
Cumulative merge throttle time of primary shards 0 0 0 min
Min cumulative merge throttle time across primary shard 0 0 0 min
Median cumulative merge throttle time across primary shard 0 0 0 min
Max cumulative merge throttle time across primary shard 0 0 0 min
Cumulative refresh time of primary shards 0 0 0 min
Cumulative refresh count of primary shards 4 4 0
Min cumulative refresh time across primary shard 0 0 0 min
Median cumulative refresh time across primary shard 0 0 0 min
Max cumulative refresh time across primary shard 0 0 0 min
Cumulative flush time of primary shards 0 0 0 min
Cumulative flush count of primary shards 1 1 0
Min cumulative flush time across primary shard 0 0 0 min
Median cumulative flush time across primary shard 0 0 0 min
Max cumulative flush time across primary shard 0 0 0 min
Total Young Gen GC time 1.564 1.426 -0.138 s
Total Young Gen GC count 30 28 -2
Total Old Gen GC time 0 0 0 s
Total Old Gen GC count 0 0 0
Store size 22.0998 22.0998 0 GB
Translog size 5.12227e-08 5.12227e-08 0 GB
Heap used for segments 0 0 0 MB
Heap used for doc values 0 0 0 MB
Heap used for terms 0 0 0 MB
Heap used for norms 0 0 0 MB
Heap used for points 0 0 0 MB
Heap used for stored fields 0 0 0 MB
Segment count 16 16 0
100th percentile latency wait-for-snapshot-recovery 300002 300002 -0.5625 ms
100th percentile service time wait-for-snapshot-recovery 300002 300002 -0.5625 ms
error rate wait-for-snapshot-recovery 100 100 0 %
Min Throughput wait-until-merges-finish 103.655 118.718 15.0627 ops/s
Mean Throughput wait-until-merges-finish 103.655 118.718 15.0627 ops/s
Median Throughput wait-until-merges-finish 103.655 118.718 15.0627 ops/s
Max Throughput wait-until-merges-finish 103.655 118.718 15.0627 ops/s
100th percentile latency wait-until-merges-finish 9.29708 8.09821 -1.19887 ms
100th percentile service time wait-until-merges-finish 9.29708 8.09821 -1.19887 ms
error rate wait-until-merges-finish 0 0 0 %
Min Throughput default 2.00968 2.00979 0.00011 ops/s
Mean Throughput default 2.01593 2.01609 0.00016 ops/s
Median Throughput default 2.01448 2.01463 0.00016 ops/s
Max Throughput default 2.02859 2.02888 0.0003 ops/s
50th percentile latency default 7.42419 7.48384 0.05965 ms
90th percentile latency default 7.93498 8.05613 0.12115 ms
99th percentile latency default 9.27149 9.14643 -0.12506 ms
100th percentile latency default 9.82869 9.29035 -0.53835 ms
50th percentile service time default 6.04651 6.10894 0.06242 ms
90th percentile service time default 6.50311 6.65823 0.15512 ms
99th percentile service time default 7.95327 8.06971 0.11644 ms
100th percentile service time default 8.62185 8.62947 0.00763 ms
error rate default 0 0 0 %
Min Throughput desc_sort_timestamp 2.0104 2.0107 0.0003 ops/s
Mean Throughput desc_sort_timestamp 2.01711 2.0176 0.00049 ops/s
Median Throughput desc_sort_timestamp 2.01556 2.016 0.00044 ops/s
Max Throughput desc_sort_timestamp 2.0307 2.03158 0.00088 ops/s
50th percentile latency desc_sort_timestamp 9.4891 9.40443 -0.08467 ms
90th percentile latency desc_sort_timestamp 10.3977 10.6104 0.21278 ms
99th percentile latency desc_sort_timestamp 12.6399 43.4186 30.7787 ms
100th percentile latency desc_sort_timestamp 13.496 74.8034 61.3074 ms
50th percentile service time desc_sort_timestamp 8.05891 8.02591 -0.033 ms
90th percentile service time desc_sort_timestamp 8.96603 9.43752 0.47149 ms
99th percentile service time desc_sort_timestamp 11.0959 41.8317 30.7358 ms
100th percentile service time desc_sort_timestamp 11.7293 73.1573 61.4281 ms
error rate desc_sort_timestamp 0 0 0 %
Min Throughput asc_sort_timestamp 2.01265 2.01259 -6e-05 ops/s
Mean Throughput asc_sort_timestamp 2.02083 2.02068 -0.00015 ops/s
Median Throughput asc_sort_timestamp 2.01892 2.01879 -0.00014 ops/s
Max Throughput asc_sort_timestamp 2.03742 2.03714 -0.00028 ops/s
50th percentile latency asc_sort_timestamp 9.21789 8.79653 -0.42136 ms
90th percentile latency asc_sort_timestamp 9.86801 9.39605 -0.47195 ms
99th percentile latency asc_sort_timestamp 14.2069 11.3411 -2.86582 ms
100th percentile latency asc_sort_timestamp 15.6073 13.0259 -2.58145 ms
50th percentile service time asc_sort_timestamp 7.8751 7.44588 -0.42921 ms
90th percentile service time asc_sort_timestamp 8.37863 7.83778 -0.54084 ms
99th percentile service time asc_sort_timestamp 12.5438 10.0762 -2.46752 ms
100th percentile service time asc_sort_timestamp 14.08 11.6751 -2.40496 ms
error rate asc_sort_timestamp 0 0 0 %
Min Throughput desc_sort_with_after_timestamp 2.01275 2.01282 7e-05 ops/s
Mean Throughput desc_sort_with_after_timestamp 2.02099 2.0211 0.00011 ops/s
Median Throughput desc_sort_with_after_timestamp 2.01907 2.01916 9e-05 ops/s
Max Throughput desc_sort_with_after_timestamp 2.03769 2.03792 0.00023 ops/s
50th percentile latency desc_sort_with_after_timestamp 7.35606 6.78559 -0.57047 ms
90th percentile latency desc_sort_with_after_timestamp 7.90021 7.27251 -0.62769 ms
99th percentile latency desc_sort_with_after_timestamp 10.9871 11.2738 0.2867 ms
100th percentile latency desc_sort_with_after_timestamp 12.2396 12.6046 0.36495 ms
50th percentile service time desc_sort_with_after_timestamp 6.03881 5.43527 -0.60355 ms
90th percentile service time desc_sort_with_after_timestamp 6.38195 5.73639 -0.64557 ms
99th percentile service time desc_sort_with_after_timestamp 9.16093 9.66341 0.50248 ms
100th percentile service time desc_sort_with_after_timestamp 10.7776 11.1515 0.37386 ms
error rate desc_sort_with_after_timestamp 0 0 0 %
Min Throughput asc_sort_with_after_timestamp 2.01313 2.01314 2e-05 ops/s
Mean Throughput asc_sort_with_after_timestamp 2.02162 2.02164 2e-05 ops/s
Median Throughput asc_sort_with_after_timestamp 2.01966 2.01966 1e-05 ops/s
Max Throughput asc_sort_with_after_timestamp 2.03888 2.03893 5e-05 ops/s
50th percentile latency asc_sort_with_after_timestamp 7.14554 6.71597 -0.42957 ms
90th percentile latency asc_sort_with_after_timestamp 7.63419 7.25122 -0.38297 ms
99th percentile latency asc_sort_with_after_timestamp 8.09479 7.83763 -0.25716 ms
100th percentile latency asc_sort_with_after_timestamp 8.17855 7.8799 -0.29865 ms
50th percentile service time asc_sort_with_after_timestamp 5.82817 5.39141 -0.43676 ms
90th percentile service time asc_sort_with_after_timestamp 6.06273 5.7296 -0.33314 ms
99th percentile service time asc_sort_with_after_timestamp 6.74943 6.59224 -0.1572 ms
100th percentile service time asc_sort_with_after_timestamp 6.8765 6.79929 -0.07721 ms
error rate asc_sort_with_after_timestamp 0 0 0 %
Min Throughput desc_sort_timestamp_can_match_shortcut 2.01008 2.01053 0.00045 ops/s
Mean Throughput desc_sort_timestamp_can_match_shortcut 2.01658 2.01729 0.00071 ops/s
Median Throughput desc_sort_timestamp_can_match_shortcut 2.01507 2.01572 0.00065 ops/s
Max Throughput desc_sort_timestamp_can_match_shortcut 2.02977 2.03104 0.00126 ops/s
50th percentile latency desc_sort_timestamp_can_match_shortcut 8.64318 8.64046 -0.00272 ms
90th percentile latency desc_sort_timestamp_can_match_shortcut 9.24528 9.23609 -0.0092 ms
99th percentile latency desc_sort_timestamp_can_match_shortcut 10.1454 10.6983 0.55294 ms
100th percentile latency desc_sort_timestamp_can_match_shortcut 10.21 10.8407 0.63066 ms
50th percentile service time desc_sort_timestamp_can_match_shortcut 7.24563 7.27891 0.03328 ms
90th percentile service time desc_sort_timestamp_can_match_shortcut 7.66512 7.5903 -0.07482 ms
99th percentile service time desc_sort_timestamp_can_match_shortcut 8.83962 9.1136 0.27398 ms
100th percentile service time desc_sort_timestamp_can_match_shortcut 8.96952 9.20052 0.231 ms
error rate desc_sort_timestamp_can_match_shortcut 0 0 0 %
Min Throughput desc_sort_timestamp_no_can_match_shortcut 2.01311 2.01315 4e-05 ops/s
Mean Throughput desc_sort_timestamp_no_can_match_shortcut 2.02159 2.02164 6e-05 ops/s
Median Throughput desc_sort_timestamp_no_can_match_shortcut 2.01962 2.01968 6e-05 ops/s
Max Throughput desc_sort_timestamp_no_can_match_shortcut 2.03883 2.03888 5e-05 ops/s
50th percentile latency desc_sort_timestamp_no_can_match_shortcut 8.36109 7.90251 -0.45859 ms
90th percentile latency desc_sort_timestamp_no_can_match_shortcut 8.74855 8.2979 -0.45065 ms
99th percentile latency desc_sort_timestamp_no_can_match_shortcut 9.98603 8.51754 -1.46848 ms
100th percentile latency desc_sort_timestamp_no_can_match_shortcut 10.6514 8.55906 -2.09235 ms
50th percentile service time desc_sort_timestamp_no_can_match_shortcut 6.9078 6.56514 -0.34266 ms
90th percentile service time desc_sort_timestamp_no_can_match_shortcut 7.13919 6.79599 -0.3432 ms
99th percentile service time desc_sort_timestamp_no_can_match_shortcut 8.39558 7.13516 -1.26042 ms
100th percentile service time desc_sort_timestamp_no_can_match_shortcut 9.05597 7.29382 -1.76216 ms
error rate desc_sort_timestamp_no_can_match_shortcut 0 0 0 %
Min Throughput asc_sort_timestamp_can_match_shortcut 2.01308 2.01306 -1e-05 ops/s
Mean Throughput asc_sort_timestamp_can_match_shortcut 2.02154 2.0215 -3e-05 ops/s
Median Throughput asc_sort_timestamp_can_match_shortcut 2.01957 2.01954 -3e-05 ops/s
Max Throughput asc_sort_timestamp_can_match_shortcut 2.0387 2.03863 -7e-05 ops/s
50th percentile latency asc_sort_timestamp_can_match_shortcut 9.24016 8.83992 -0.40024 ms
90th percentile latency asc_sort_timestamp_can_match_shortcut 9.78059 9.33093 -0.44966 ms
99th percentile latency asc_sort_timestamp_can_match_shortcut 10.5758 10.9401 0.36425 ms
100th percentile latency asc_sort_timestamp_can_match_shortcut 10.8695 11.0746 0.20517 ms
50th percentile service time asc_sort_timestamp_can_match_shortcut 7.78886 7.46994 -0.31892 ms
90th percentile service time asc_sort_timestamp_can_match_shortcut 8.31182 7.76827 -0.54355 ms
99th percentile service time asc_sort_timestamp_can_match_shortcut 9.03696 9.58403 0.54707 ms
100th percentile service time asc_sort_timestamp_can_match_shortcut 9.12237 9.63162 0.50925 ms
error rate asc_sort_timestamp_can_match_shortcut 0 0 0 %
Min Throughput asc_sort_timestamp_no_can_match_shortcut 2.01311 2.01312 1e-05 ops/s
Mean Throughput asc_sort_timestamp_no_can_match_shortcut 2.02156 2.0216 4e-05 ops/s
Median Throughput asc_sort_timestamp_no_can_match_shortcut 2.01957 2.01962 5e-05 ops/s
Max Throughput asc_sort_timestamp_no_can_match_shortcut 2.03872 2.03884 0.00012 ops/s
50th percentile latency asc_sort_timestamp_no_can_match_shortcut 9.35534 8.74461 -0.61074 ms
90th percentile latency asc_sort_timestamp_no_can_match_shortcut 9.84369 9.15155 -0.69214 ms
99th percentile latency asc_sort_timestamp_no_can_match_shortcut 46.6597 11.2037 -35.456 ms
100th percentile latency asc_sort_timestamp_no_can_match_shortcut 82.1357 11.2721 -70.8635 ms
50th percentile service time asc_sort_timestamp_no_can_match_shortcut 7.96372 7.40439 -0.55933 ms
90th percentile service time asc_sort_timestamp_no_can_match_shortcut 8.28309 7.56654 -0.71655 ms
99th percentile service time asc_sort_timestamp_no_can_match_shortcut 45.4803 9.59873 -35.8815 ms
100th percentile service time asc_sort_timestamp_no_can_match_shortcut 80.9569 9.6365 -71.3204 ms
error rate asc_sort_timestamp_no_can_match_shortcut 0 0 0 %
Min Throughput term 2.01278 2.01283 4e-05 ops/s
Mean Throughput term 2.02102 2.0211 8e-05 ops/s
Median Throughput term 2.01909 2.01917 8e-05 ops/s
Max Throughput term 2.03783 2.03798 0.00015 ops/s
50th percentile latency term 4.5966 4.44508 -0.15152 ms
90th percentile latency term 4.94276 4.75889 -0.18387 ms
99th percentile latency term 5.41429 5.04121 -0.37308 ms
100th percentile latency term 5.50697 5.15251 -0.35446 ms
50th percentile service time term 3.17419 2.98612 -0.18807 ms
90th percentile service time term 3.36182 3.12898 -0.23284 ms
99th percentile service time term 3.5855 3.30477 -0.28073 ms
100th percentile service time term 3.6047 3.34952 -0.25517 ms
error rate term 0 0 0 %
Min Throughput multi_terms-keyword 1.27424 1.31024 0.03599 ops/s
Mean Throughput multi_terms-keyword 1.30168 1.32372 0.02204 ops/s
Median Throughput multi_terms-keyword 1.30414 1.32498 0.02084 ops/s
Max Throughput multi_terms-keyword 1.31592 1.33069 0.01477 ops/s
50th percentile latency multi_terms-keyword 26523 25803.7 -719.311 ms
90th percentile latency multi_terms-keyword 36379.2 35575 -804.164 ms
99th percentile latency multi_terms-keyword 38544.3 37824.6 -719.668 ms
100th percentile latency multi_terms-keyword 38663.1 37939 -724.094 ms
50th percentile service time multi_terms-keyword 741.578 740.283 -1.29453 ms
90th percentile service time multi_terms-keyword 756.657 757.072 0.41428 ms
99th percentile service time multi_terms-keyword 819.94 806.764 -13.1762 ms
100th percentile service time multi_terms-keyword 832.324 807.812 -24.5121 ms
error rate multi_terms-keyword 0 0 0 %
Min Throughput keyword-terms 2.00811 2.00759 -0.00052 ops/s
Mean Throughput keyword-terms 2.01336 2.01242 -0.00094 ops/s
Median Throughput keyword-terms 2.01214 2.01127 -0.00087 ops/s
Max Throughput keyword-terms 2.02402 2.0223 -0.00172 ops/s
50th percentile latency keyword-terms 28.9655 28.1853 -0.78016 ms
90th percentile latency keyword-terms 38.3409 38.9448 0.6039 ms
99th percentile latency keyword-terms 56.8754 39.6127 -17.2627 ms
100th percentile latency keyword-terms 73.4721 39.8047 -33.6673 ms
50th percentile service time keyword-terms 27.2328 26.0852 -1.14766 ms
90th percentile service time keyword-terms 36.8057 36.8767 0.07105 ms
99th percentile service time keyword-terms 54.9843 37.9648 -17.0195 ms
100th percentile service time keyword-terms 71.9609 38.273 -33.688 ms
error rate keyword-terms 0 0 0 %
Min Throughput keyword-terms-low-cardinality 2.01242 2.01271 0.00029 ops/s
Mean Throughput keyword-terms-low-cardinality 2.02044 2.0209 0.00047 ops/s
Median Throughput keyword-terms-low-cardinality 2.01856 2.01899 0.00043 ops/s
Max Throughput keyword-terms-low-cardinality 2.0368 2.03758 0.00078 ops/s
50th percentile latency keyword-terms-low-cardinality 24.9011 24.1758 -0.7253 ms
90th percentile latency keyword-terms-low-cardinality 33.8805 34.0118 0.13131 ms
99th percentile latency keyword-terms-low-cardinality 34.9598 35.8459 0.8861 ms
100th percentile latency keyword-terms-low-cardinality 35.4772 36.0967 0.6195 ms
50th percentile service time keyword-terms-low-cardinality 22.6539 21.9124 -0.74151 ms
90th percentile service time keyword-terms-low-cardinality 31.3811 31.9899 0.60883 ms
99th percentile service time keyword-terms-low-cardinality 32.9123 33.3517 0.43943 ms
100th percentile service time keyword-terms-low-cardinality 33.8469 33.8926 0.04571 ms
error rate keyword-terms-low-cardinality 0 0 0 %
Min Throughput composite-terms 2.00273 2.0044 0.00168 ops/s
Mean Throughput composite-terms 2.00446 2.00721 0.00275 ops/s
Median Throughput composite-terms 2.00407 2.00657 0.0025 ops/s
Max Throughput composite-terms 2.00801 2.01292 0.00491 ops/s
50th percentile latency composite-terms 204.311 178.625 -25.6866 ms
90th percentile latency composite-terms 209.972 183.59 -26.3823 ms
99th percentile latency composite-terms 217.08 195.527 -21.5525 ms
100th percentile latency composite-terms 217.613 197.501 -20.1115 ms
50th percentile service time composite-terms 202.92 177.364 -25.5561 ms
90th percentile service time composite-terms 208.705 182.303 -26.4025 ms
99th percentile service time composite-terms 215.952 194.459 -21.493 ms
100th percentile service time composite-terms 216.164 196.455 -19.7092 ms
error rate composite-terms 0 0 0 %
Min Throughput composite_terms-keyword 2.00404 2.00423 0.00019 ops/s
Mean Throughput composite_terms-keyword 2.00663 2.00699 0.00036 ops/s
Median Throughput composite_terms-keyword 2.00603 2.00636 0.00033 ops/s
Max Throughput composite_terms-keyword 2.0119 2.01251 0.00061 ops/s
50th percentile latency composite_terms-keyword 328.855 327.635 -1.21941 ms
90th percentile latency composite_terms-keyword 334.876 338.887 4.01042 ms
99th percentile latency composite_terms-keyword 345.262 357.231 11.969 ms
100th percentile latency composite_terms-keyword 349.173 358.761 9.5871 ms
50th percentile service time composite_terms-keyword 328.108 326.03 -2.078 ms
90th percentile service time composite_terms-keyword 333.739 337.763 4.0239 ms
99th percentile service time composite_terms-keyword 343.68 354.965 11.2846 ms
100th percentile service time composite_terms-keyword 347.702 356.267 8.56519 ms
error rate composite_terms-keyword 0 0 0 %
Min Throughput composite-date_histogram-daily 2.01239 2.01231 -8e-05 ops/s
Mean Throughput composite-date_histogram-daily 2.02038 2.02023 -0.00014 ops/s
Median Throughput composite-date_histogram-daily 2.01852 2.01839 -0.00013 ops/s
Max Throughput composite-date_histogram-daily 2.03666 2.03633 -0.00033 ops/s
50th percentile latency composite-date_histogram-daily 5.23123 5.30032 0.06909 ms
90th percentile latency composite-date_histogram-daily 5.60133 5.8227 0.22137 ms
99th percentile latency composite-date_histogram-daily 7.53455 9.35729 1.82273 ms
100th percentile latency composite-date_histogram-daily 9.09078 11.8866 2.79582 ms
50th percentile service time composite-date_histogram-daily 3.78494 3.9968 0.21186 ms
90th percentile service time composite-date_histogram-daily 4.11807 4.25955 0.14149 ms
99th percentile service time composite-date_histogram-daily 6.17018 7.88309 1.7129 ms
100th percentile service time composite-date_histogram-daily 7.88847 10.1791 2.29063 ms
error rate composite-date_histogram-daily 0 0 0 %
Min Throughput range 2.01305 2.01306 1e-05 ops/s
Mean Throughput range 2.0215 2.02148 -1e-05 ops/s
Median Throughput range 2.01953 2.0195 -3e-05 ops/s
Max Throughput range 2.03865 2.03863 -2e-05 ops/s
50th percentile latency range 6.80109 6.03934 -0.76174 ms
90th percentile latency range 7.25595 6.54028 -0.71568 ms
99th percentile latency range 7.94834 7.23822 -0.71012 ms
100th percentile latency range 8.39693 7.2927 -1.10423 ms
50th percentile service time range 5.42998 4.80404 -0.62594 ms
90th percentile service time range 5.61919 4.92613 -0.69306 ms
99th percentile service time range 6.60774 5.83945 -0.76829 ms
100th percentile service time range 6.64579 5.9625 -0.68328 ms
error rate range 0 0 0 %
Min Throughput range-numeric 2.01315 2.01316 2e-05 ops/s
Mean Throughput range-numeric 2.02165 2.02167 2e-05 ops/s
Median Throughput range-numeric 2.01968 2.01969 1e-05 ops/s
Max Throughput range-numeric 2.03891 2.03892 1e-05 ops/s
50th percentile latency range-numeric 4.08113 4.02832 -0.05281 ms
90th percentile latency range-numeric 4.52281 4.42822 -0.09459 ms
99th percentile latency range-numeric 4.70016 4.58958 -0.11058 ms
100th percentile latency range-numeric 4.74403 4.64032 -0.10371 ms
50th percentile service time range-numeric 2.76975 2.7337 -0.03605 ms
90th percentile service time range-numeric 2.90709 2.886 -0.02109 ms
99th percentile service time range-numeric 3.16756 3.12212 -0.04544 ms
100th percentile service time range-numeric 3.22386 3.12414 -0.09972 ms
error rate range-numeric 0 0 0 %
Min Throughput keyword-in-range 2.01179 2.01178 -1e-05 ops/s
Mean Throughput keyword-in-range 2.0194 2.01938 -2e-05 ops/s
Median Throughput keyword-in-range 2.01761 2.01762 1e-05 ops/s
Max Throughput keyword-in-range 2.03488 2.03485 -3e-05 ops/s
50th percentile latency keyword-in-range 15.3394 14.1449 -1.19445 ms
90th percentile latency keyword-in-range 15.76 14.8283 -0.93176 ms
99th percentile latency keyword-in-range 22.1036 20.8082 -1.29538 ms
100th percentile latency keyword-in-range 22.1248 21.257 -0.86783 ms
50th percentile service time keyword-in-range 13.8451 12.9348 -0.9103 ms
90th percentile service time keyword-in-range 14.1273 13.2585 -0.8688 ms
99th percentile service time keyword-in-range 20.5499 19.3202 -1.22969 ms
100th percentile service time keyword-in-range 20.8405 19.4621 -1.37845 ms
error rate keyword-in-range 0 0 0 %
Min Throughput date_histogram_hourly_agg 2.0113 2.01131 2e-05 ops/s
Mean Throughput date_histogram_hourly_agg 2.01859 2.01862 3e-05 ops/s
Median Throughput date_histogram_hourly_agg 2.01689 2.01693 5e-05 ops/s
Max Throughput date_histogram_hourly_agg 2.03339 2.03348 8e-05 ops/s
50th percentile latency date_histogram_hourly_agg 7.74545 7.4555 -0.28995 ms
90th percentile latency date_histogram_hourly_agg 9.28079 9.1474 -0.13339 ms
99th percentile latency date_histogram_hourly_agg 10.1902 9.82999 -0.3602 ms
100th percentile latency date_histogram_hourly_agg 10.5211 9.84602 -0.67507 ms
50th percentile service time date_histogram_hourly_agg 6.31582 6.03853 -0.27729 ms
90th percentile service time date_histogram_hourly_agg 7.88563 7.7109 -0.17473 ms
99th percentile service time date_histogram_hourly_agg 9.05064 8.15156 -0.89908 ms
100th percentile service time date_histogram_hourly_agg 9.19876 8.23985 -0.95891 ms
error rate date_histogram_hourly_agg 0 0 0 %
Min Throughput date_histogram_minute_agg 2.0112 2.01129 9e-05 ops/s
Mean Throughput date_histogram_minute_agg 2.01839 2.01856 0.00017 ops/s
Median Throughput date_histogram_minute_agg 2.01672 2.01688 0.00016 ops/s
Max Throughput date_histogram_minute_agg 2.03301 2.03332 0.0003 ops/s
50th percentile latency date_histogram_minute_agg 41.8756 45.6362 3.76053 ms
90th percentile latency date_histogram_minute_agg 43.1749 46.7122 3.53729 ms
99th percentile latency date_histogram_minute_agg 45.6777 53.6707 7.99296 ms
100th percentile latency date_histogram_minute_agg 45.6959 56.2099 10.514 ms
50th percentile service time date_histogram_minute_agg 40.4818 44.3446 3.86276 ms
90th percentile service time date_histogram_minute_agg 42.1203 45.4211 3.30079 ms
99th percentile service time date_histogram_minute_agg 44.165 52.3438 8.17876 ms
100th percentile service time date_histogram_minute_agg 44.2707 54.9533 10.6826 ms
error rate date_histogram_minute_agg 0 0 0 %
Min Throughput scroll 44.1929 46.4114 2.21843 pages/s
Mean Throughput scroll 44.747 46.909 2.16201 pages/s
Median Throughput scroll 44.8055 46.9614 2.15584 pages/s
Max Throughput scroll 45.1914 47.2633 2.07192 pages/s
50th percentile latency scroll 6226.7 3581.79 -2644.91 ms
90th percentile latency scroll 7967.33 4470.9 -3496.43 ms
99th percentile latency scroll 8341.55 4669.59 -3671.95 ms
100th percentile latency scroll 8360.82 4680.47 -3680.35 ms
50th percentile service time scroll 535.872 514.86 -21.0123 ms
90th percentile service time scroll 551.416 526.013 -25.4025 ms
99th percentile service time scroll 576.748 548.894 -27.8534 ms
100th percentile service time scroll 587.802 549.984 -37.8182 ms
error rate scroll 0 0 0 %
Min Throughput query-string-on-message 2.0108 2.01117 0.00037 ops/s
Mean Throughput query-string-on-message 2.01778 2.01836 0.00059 ops/s
Median Throughput query-string-on-message 2.01615 2.01668 0.00053 ops/s
Max Throughput query-string-on-message 2.03195 2.03295 0.00099 ops/s
50th percentile latency query-string-on-message 7.52373 7.06212 -0.46161 ms
90th percentile latency query-string-on-message 8.14301 7.45819 -0.68482 ms
99th percentile latency query-string-on-message 9.51414 8.23701 -1.27712 ms
100th percentile latency query-string-on-message 9.66927 8.43831 -1.23096 ms
50th percentile service time query-string-on-message 6.09121 5.69636 -0.39486 ms
90th percentile service time query-string-on-message 6.58713 5.98366 -0.60347 ms
99th percentile service time query-string-on-message 7.9138 6.98808 -0.92572 ms
100th percentile service time query-string-on-message 8.09851 7.09205 -1.00646 ms
error rate query-string-on-message 0 0 0 %
Min Throughput query-string-on-message-filtered 2.01265 2.01229 -0.00036 ops/s
Mean Throughput query-string-on-message-filtered 2.02082 2.02023 -0.00058 ops/s
Median Throughput query-string-on-message-filtered 2.01893 2.01837 -0.00056 ops/s
Max Throughput query-string-on-message-filtered 2.03745 2.0364 -0.00105 ops/s
50th percentile latency query-string-on-message-filtered 14.4016 14.1992 -0.20243 ms
90th percentile latency query-string-on-message-filtered 15.1793 14.6569 -0.52245 ms
99th percentile latency query-string-on-message-filtered 18.3001 17.718 -0.58209 ms
100th percentile latency query-string-on-message-filtered 20.7724 18.5851 -2.18725 ms
50th percentile service time query-string-on-message-filtered 13.0157 12.9152 -0.10042 ms
90th percentile service time query-string-on-message-filtered 13.6349 13.1268 -0.50814 ms
99th percentile service time query-string-on-message-filtered 16.4721 16.6766 0.20444 ms
100th percentile service time query-string-on-message-filtered 18.969 17.753 -1.21596 ms
error rate query-string-on-message-filtered 0 0 0 %
Min Throughput query-string-on-message-filtered-sorted-num 2.01229 2.01235 6e-05 ops/s
Mean Throughput query-string-on-message-filtered-sorted-num 2.0202 2.02032 0.00012 ops/s
Median Throughput query-string-on-message-filtered-sorted-num 2.01835 2.01847 0.00012 ops/s
Max Throughput query-string-on-message-filtered-sorted-num 2.0363 2.03652 0.00022 ops/s
50th percentile latency query-string-on-message-filtered-sorted-num 23.9167 23.0834 -0.83328 ms
90th percentile latency query-string-on-message-filtered-sorted-num 24.4956 23.5791 -0.91653 ms
99th percentile latency query-string-on-message-filtered-sorted-num 34.2382 27.8034 -6.43481 ms
100th percentile latency query-string-on-message-filtered-sorted-num 35.4683 29.7174 -5.75088 ms
50th percentile service time query-string-on-message-filtered-sorted-num 21.5343 20.7771 -0.75716 ms
90th percentile service time query-string-on-message-filtered-sorted-num 21.8477 21.1274 -0.7203 ms
99th percentile service time query-string-on-message-filtered-sorted-num 32.2299 25.7187 -6.51116 ms
100th percentile service time query-string-on-message-filtered-sorted-num 33.3707 27.7705 -5.60025 ms
error rate query-string-on-message-filtered-sorted-num 0 0 0 %
Min Throughput sort_keyword_can_match_shortcut 2.01287 2.01288 1e-05 ops/s
Mean Throughput sort_keyword_can_match_shortcut 2.02116 2.02118 2e-05 ops/s
Median Throughput sort_keyword_can_match_shortcut 2.01923 2.01924 1e-05 ops/s
Max Throughput sort_keyword_can_match_shortcut 2.03803 2.03811 9e-05 ops/s
50th percentile latency sort_keyword_can_match_shortcut 6.62448 5.75054 -0.87394 ms
90th percentile latency sort_keyword_can_match_shortcut 7.01412 6.14819 -0.86593 ms
99th percentile latency sort_keyword_can_match_shortcut 8.5844 6.36614 -2.21827 ms
100th percentile latency sort_keyword_can_match_shortcut 8.85934 6.4222 -2.43714 ms
50th percentile service time sort_keyword_can_match_shortcut 5.21128 4.42516 -0.78611 ms
90th percentile service time sort_keyword_can_match_shortcut 5.36283 4.57166 -0.79117 ms
99th percentile service time sort_keyword_can_match_shortcut 6.6673 4.86339 -1.80391 ms
100th percentile service time sort_keyword_can_match_shortcut 7.50381 5.03439 -2.46942 ms
error rate sort_keyword_can_match_shortcut 0 0 0 %
Min Throughput sort_keyword_no_can_match_shortcut 2.0132 2.01323 3e-05 ops/s
Mean Throughput sort_keyword_no_can_match_shortcut 2.02172 2.02175 3e-05 ops/s
Median Throughput sort_keyword_no_can_match_shortcut 2.01973 2.01977 4e-05 ops/s
Max Throughput sort_keyword_no_can_match_shortcut 2.03902 2.03908 6e-05 ops/s
50th percentile latency sort_keyword_no_can_match_shortcut 6.17008 5.83208 -0.338 ms
90th percentile latency sort_keyword_no_can_match_shortcut 6.47124 6.25627 -0.21497 ms
99th percentile latency sort_keyword_no_can_match_shortcut 7.08015 6.99648 -0.08367 ms
100th percentile latency sort_keyword_no_can_match_shortcut 7.44022 7.22054 -0.21968 ms
50th percentile service time sort_keyword_no_can_match_shortcut 4.73027 4.47825 -0.25202 ms
90th percentile service time sort_keyword_no_can_match_shortcut 4.93196 4.57642 -0.35554 ms
99th percentile service time sort_keyword_no_can_match_shortcut 5.56006 5.08616 -0.4739 ms
100th percentile service time sort_keyword_no_can_match_shortcut 5.93282 5.50007 -0.43275 ms
error rate sort_keyword_no_can_match_shortcut 0 0 0 %
Min Throughput sort_numeric_desc 2.01188 2.01195 7e-05 ops/s
Mean Throughput sort_numeric_desc 2.01955 2.01964 9e-05 ops/s
Median Throughput sort_numeric_desc 2.01776 2.01783 7e-05 ops/s
Max Throughput sort_numeric_desc 2.0351 2.0353 0.0002 ops/s
50th percentile latency sort_numeric_desc 5.92537 5.85002 -0.07535 ms
90th percentile latency sort_numeric_desc 6.30994 6.27159 -0.03835 ms
99th percentile latency sort_numeric_desc 7.51229 6.67599 -0.8363 ms
100th percentile latency sort_numeric_desc 7.65194 6.70906 -0.94289 ms
50th percentile service time sort_numeric_desc 4.56266 4.55778 -0.00488 ms
90th percentile service time sort_numeric_desc 4.69356 4.66488 -0.02868 ms
99th percentile service time sort_numeric_desc 5.74511 5.47688 -0.26823 ms
100th percentile service time sort_numeric_desc 5.84205 5.63939 -0.20266 ms
error rate sort_numeric_desc 0 0 0 %
Min Throughput sort_numeric_asc 2.01297 2.01302 5e-05 ops/s
Mean Throughput sort_numeric_asc 2.02133 2.02143 0.0001 ops/s
Median Throughput sort_numeric_asc 2.01937 2.01947 0.00011 ops/s
Max Throughput sort_numeric_asc 2.03837 2.03852 0.00015 ops/s
50th percentile latency sort_numeric_asc 6.28833 5.61073 -0.6776 ms
90th percentile latency sort_numeric_asc 6.67691 5.98134 -0.69557 ms
99th percentile latency sort_numeric_asc 7.12894 6.59748 -0.53146 ms
100th percentile latency sort_numeric_asc 7.24479 7.00917 -0.23562 ms
50th percentile service time sort_numeric_asc 4.86934 4.24521 -0.62414 ms
90th percentile service time sort_numeric_asc 5.0228 4.34596 -0.67684 ms
99th percentile service time sort_numeric_asc 5.52744 4.9422 -0.58524 ms
100th percentile service time sort_numeric_asc 5.72968 5.22471 -0.50498 ms
error rate sort_numeric_asc 0 0 0 %
Min Throughput sort_numeric_desc_with_match 2.01325 2.01324 -1e-05 ops/s
Mean Throughput sort_numeric_desc_with_match 2.02179 2.02178 -0 ops/s
Median Throughput sort_numeric_desc_with_match 2.01981 2.01978 -3e-05 ops/s
Max Throughput sort_numeric_desc_with_match 2.03921 2.03915 -6e-05 ops/s
50th percentile latency sort_numeric_desc_with_match 3.7936 3.88139 0.08779 ms
90th percentile latency sort_numeric_desc_with_match 4.23738 4.31043 0.07305 ms
99th percentile latency sort_numeric_desc_with_match 4.35942 4.39727 0.03785 ms
100th percentile latency sort_numeric_desc_with_match 4.39089 4.4024 0.01151 ms
50th percentile service time sort_numeric_desc_with_match 2.44011 2.58931 0.14919 ms
90th percentile service time sort_numeric_desc_with_match 2.52524 2.67139 0.14616 ms
99th percentile service time sort_numeric_desc_with_match 2.70609 3.01565 0.30956 ms
100th percentile service time sort_numeric_desc_with_match 2.75752 3.04413 0.28662 ms
error rate sort_numeric_desc_with_match 0 0 0 %
Min Throughput sort_numeric_asc_with_match 2.01323 2.01327 4e-05 ops/s
Mean Throughput sort_numeric_asc_with_match 2.02179 2.02185 6e-05 ops/s
Median Throughput sort_numeric_asc_with_match 2.01979 2.01986 6e-05 ops/s
Max Throughput sort_numeric_asc_with_match 2.03917 2.03929 0.00011 ops/s
50th percentile latency sort_numeric_asc_with_match 4.1819 3.6444 -0.5375 ms
90th percentile latency sort_numeric_asc_with_match 4.68087 4.03751 -0.64336 ms
99th percentile latency sort_numeric_asc_with_match 5.25611 4.34726 -0.90885 ms
100th percentile latency sort_numeric_asc_with_match 5.45491 4.38389 -1.07102 ms
50th percentile service time sort_numeric_asc_with_match 2.84452 2.28092 -0.5636 ms
90th percentile service time sort_numeric_asc_with_match 2.95143 2.35506 -0.59637 ms
99th percentile service time sort_numeric_asc_with_match 3.37819 2.88114 -0.49705 ms
100th percentile service time sort_numeric_asc_with_match 3.44585 2.8887 -0.55714 ms
error rate sort_numeric_asc_with_match 0 0 0 %
Min Throughput range_field_conjunction_big_range_big_term_query 2.01294 2.01324 0.00029 ops/s
Mean Throughput range_field_conjunction_big_range_big_term_query 2.02128 2.02179 0.00051 ops/s
Median Throughput range_field_conjunction_big_range_big_term_query 2.01935 2.0198 0.00045 ops/s
Max Throughput range_field_conjunction_big_range_big_term_query 2.03824 2.03921 0.00097 ops/s
50th percentile latency range_field_conjunction_big_range_big_term_query 4.07925 3.5472 -0.53205 ms
90th percentile latency range_field_conjunction_big_range_big_term_query 4.60295 3.97553 -0.62742 ms
99th percentile latency range_field_conjunction_big_range_big_term_query 4.82804 4.10763 -0.72041 ms
100th percentile latency range_field_conjunction_big_range_big_term_query 4.90998 4.11098 -0.799 ms
50th percentile service time range_field_conjunction_big_range_big_term_query 2.67599 2.24859 -0.4274 ms
90th percentile service time range_field_conjunction_big_range_big_term_query 2.83531 2.34338 -0.49193 ms
99th percentile service time range_field_conjunction_big_range_big_term_query 2.98639 2.50902 -0.47736 ms
100th percentile service time range_field_conjunction_big_range_big_term_query 3.01114 2.57737 -0.43377 ms
error rate range_field_conjunction_big_range_big_term_query 0 0 0 %
Min Throughput range_field_disjunction_big_range_small_term_query 2.01324 2.01325 0 ops/s
Mean Throughput range_field_disjunction_big_range_small_term_query 2.02179 2.0218 1e-05 ops/s
Median Throughput range_field_disjunction_big_range_small_term_query 2.01981 2.0198 -0 ops/s
Max Throughput range_field_disjunction_big_range_small_term_query 2.03919 2.03917 -3e-05 ops/s
50th percentile latency range_field_disjunction_big_range_small_term_query 3.99708 3.64002 -0.35706 ms
90th percentile latency range_field_disjunction_big_range_small_term_query 4.44858 4.07641 -0.37217 ms
99th percentile latency range_field_disjunction_big_range_small_term_query 4.63318 5.39163 0.75845 ms
100th percentile latency range_field_disjunction_big_range_small_term_query 4.67685 5.42509 0.74825 ms
50th percentile service time range_field_disjunction_big_range_small_term_query 2.69274 2.30634 -0.3864 ms
90th percentile service time range_field_disjunction_big_range_small_term_query 2.81272 2.40981 -0.40292 ms
99th percentile service time range_field_disjunction_big_range_small_term_query 2.93996 3.92606 0.9861 ms
100th percentile service time range_field_disjunction_big_range_small_term_query 2.95976 4.22888 1.26913 ms
error rate range_field_disjunction_big_range_small_term_query 0 0 0 %
Min Throughput range_field_conjunction_small_range_small_term_query 2.01301 2.01324 0.00023 ops/s
Mean Throughput range_field_conjunction_small_range_small_term_query 2.02142 2.02181 0.0004 ops/s
Median Throughput range_field_conjunction_small_range_small_term_query 2.01945 2.0198 0.00035 ops/s
Max Throughput range_field_conjunction_small_range_small_term_query 2.03854 2.03921 0.00067 ops/s
50th percentile latency range_field_conjunction_small_range_small_term_query 4.13886 3.80767 -0.33119 ms
90th percentile latency range_field_conjunction_small_range_small_term_query 4.47814 4.22442 -0.25372 ms
99th percentile latency range_field_conjunction_small_range_small_term_query 7.66201 4.43722 -3.22479 ms
100th percentile latency range_field_conjunction_small_range_small_term_query 10.6129 4.4683 -6.14462 ms
50th percentile service time range_field_conjunction_small_range_small_term_query 2.70848 2.44639 -0.26209 ms
90th percentile service time range_field_conjunction_small_range_small_term_query 2.84652 2.54154 -0.30498 ms
99th percentile service time range_field_conjunction_small_range_small_term_query 5.90034 2.67603 -3.2243 ms
100th percentile service time range_field_conjunction_small_range_small_term_query 8.74483 2.71519 -6.02964 ms
error rate range_field_conjunction_small_range_small_term_query 0 0 0 %
Min Throughput range_field_conjunction_small_range_big_term_query 2.01323 2.01328 5e-05 ops/s
Mean Throughput range_field_conjunction_small_range_big_term_query 2.02176 2.02184 8e-05 ops/s
Median Throughput range_field_conjunction_small_range_big_term_query 2.01978 2.01983 5e-05 ops/s
Max Throughput range_field_conjunction_small_range_big_term_query 2.03913 2.03924 0.00011 ops/s
50th percentile latency range_field_conjunction_small_range_big_term_query 4.21875 3.55463 -0.66412 ms
90th percentile latency range_field_conjunction_small_range_big_term_query 4.6564 3.93649 -0.71991 ms
99th percentile latency range_field_conjunction_small_range_big_term_query 5.05975 4.18435 -0.8754 ms
100th percentile latency range_field_conjunction_small_range_big_term_query 5.28984 4.20179 -1.08805 ms
50th percentile service time range_field_conjunction_small_range_big_term_query 2.84401 2.16586 -0.67816 ms
90th percentile service time range_field_conjunction_small_range_big_term_query 3.03835 2.27688 -0.76147 ms
99th percentile service time range_field_conjunction_small_range_big_term_query 3.38332 2.68841 -0.69491 ms
100th percentile service time range_field_conjunction_small_range_big_term_query 3.59119 2.75484 -0.83635 ms
error rate range_field_conjunction_small_range_big_term_query 0 0 0 %
Min Throughput range-auto-date-histo 0.292287 0.285876 -0.00641 ops/s
Mean Throughput range-auto-date-histo 0.293783 0.286656 -0.00713 ops/s
Median Throughput range-auto-date-histo 0.294022 0.286664 -0.00736 ops/s
Max Throughput range-auto-date-histo 0.2947 0.287274 -0.00743 ops/s
50th percentile latency range-auto-date-histo 291308 300405 9096.44 ms
90th percentile latency range-auto-date-histo 406820 419274 12454.3 ms
99th percentile latency range-auto-date-histo 432309 445652 13343.2 ms
100th percentile latency range-auto-date-histo 433697 447240 13543 ms
50th percentile service time range-auto-date-histo 3370.06 3456.77 86.7029 ms
90th percentile service time range-auto-date-histo 3435.86 3553.17 117.315 ms
99th percentile service time range-auto-date-histo 3514.51 3692.42 177.908 ms
100th percentile service time range-auto-date-histo 3537.61 3703.29 165.68 ms
error rate range-auto-date-histo 0 0 0 %
Min Throughput range-with-metrics 0.123142 0.122762 -0.00038 ops/s
Mean Throughput range-with-metrics 0.123499 0.123 -0.0005 ops/s
Median Throughput range-with-metrics 0.12352 0.123031 -0.00049 ops/s
Max Throughput range-with-metrics 0.123695 0.123075 -0.00062 ops/s
50th percentile latency range-with-metrics 763733 767000 3267.41 ms
90th percentile latency range-with-metrics 1.0663e+06 1.07183e+06 5530.69 ms
99th percentile latency range-with-metrics 1.13429e+06 1.1404e+06 6112.38 ms
100th percentile latency range-with-metrics 1.13805e+06 1.14422e+06 6166 ms
50th percentile service time range-with-metrics 8058.91 8115.01 56.0981 ms
90th percentile service time range-with-metrics 8129.13 8168.89 39.7671 ms
99th percentile service time range-with-metrics 8236.96 8221.52 -15.4409 ms
100th percentile service time range-with-metrics 8264.82 8231.1 -33.7246 ms
error rate range-with-metrics 0 0 0 %
Min Throughput range-auto-date-histo-with-metrics 0.104981 0.105791 0.00081 ops/s
Mean Throughput range-auto-date-histo-with-metrics 0.105339 0.106433 0.00109 ops/s
Median Throughput range-auto-date-histo-with-metrics 0.10538 0.106502 0.00112 ops/s
Max Throughput range-auto-date-histo-with-metrics 0.105545 0.106848 0.0013 ops/s
50th percentile latency range-auto-date-histo-with-metrics 903064 893039 -10025.1 ms
90th percentile latency range-auto-date-histo-with-metrics 1.26045e+06 1.24493e+06 -15519.4 ms
99th percentile latency range-auto-date-histo-with-metrics 1.34148e+06 1.32409e+06 -17384.9 ms
100th percentile latency range-auto-date-histo-with-metrics 1.34594e+06 1.3285e+06 -17444.9 ms
50th percentile service time range-auto-date-histo-with-metrics 9445.21 9295.65 -149.562 ms
90th percentile service time range-auto-date-histo-with-metrics 9565.71 9387.5 -178.217 ms
99th percentile service time range-auto-date-histo-with-metrics 9633.53 9552.53 -81.001 ms
100th percentile service time range-auto-date-histo-with-metrics 9638.43 9618.58 -19.8506 ms
error rate range-auto-date-histo-with-metrics 0 0 0 %
Min Throughput range-agg-1 2.01322 2.01323 1e-05 ops/s
Mean Throughput range-agg-1 2.02176 2.02176 0 ops/s
Median Throughput range-agg-1 2.01977 2.01978 1e-05 ops/s
Max Throughput range-agg-1 2.03912 2.03912 0 ops/s
50th percentile latency range-agg-1 4.21844 4.14862 -0.06982 ms
90th percentile latency range-agg-1 4.59752 4.58505 -0.01247 ms
99th percentile latency range-agg-1 4.73258 4.82639 0.09381 ms
100th percentile latency range-agg-1 4.74511 4.88809 0.14297 ms
50th percentile service time range-agg-1 2.75917 2.81383 0.05466 ms
90th percentile service time range-agg-1 2.90718 2.94061 0.03343 ms
99th percentile service time range-agg-1 3.07296 3.08442 0.01146 ms
100th percentile service time range-agg-1 3.08034 3.09295 0.01261 ms
error rate range-agg-1 0 0 0 %
Min Throughput range-agg-2 2.01322 2.01322 1e-05 ops/s
Mean Throughput range-agg-2 2.02175 2.02178 3e-05 ops/s
Median Throughput range-agg-2 2.01976 2.0198 4e-05 ops/s
Max Throughput range-agg-2 2.03911 2.03914 3e-05 ops/s
50th percentile latency range-agg-2 4.48526 4.21461 -0.27065 ms
90th percentile latency range-agg-2 4.95575 4.61539 -0.34036 ms
99th percentile latency range-agg-2 5.21424 4.78483 -0.42941 ms
100th percentile latency range-agg-2 5.25772 4.78573 -0.47199 ms
50th percentile service time range-agg-2 3.16735 2.85365 -0.3137 ms
90th percentile service time range-agg-2 3.34194 2.96428 -0.37766 ms
99th percentile service time range-agg-2 3.72549 3.0992 -0.62629 ms
100th percentile service time range-agg-2 3.75306 3.13913 -0.61393 ms
error rate range-agg-2 0 0 0 %
Min Throughput cardinality-agg-low 2.01256 2.01264 8e-05 ops/s
Mean Throughput cardinality-agg-low 2.02064 2.02078 0.00014 ops/s
Median Throughput cardinality-agg-low 2.01875 2.01888 0.00013 ops/s
Max Throughput cardinality-agg-low 2.0371 2.03739 0.00029 ops/s
50th percentile latency cardinality-agg-low 6.00924 5.84583 -0.16341 ms
90th percentile latency cardinality-agg-low 6.72728 6.50605 -0.22123 ms
99th percentile latency cardinality-agg-low 7.97622 6.79344 -1.18278 ms
100th percentile latency cardinality-agg-low 8.21725 6.80673 -1.41052 ms
50th percentile service time cardinality-agg-low 4.54755 4.28144 -0.26612 ms
90th percentile service time cardinality-agg-low 5.12955 4.9928 -0.13675 ms
99th percentile service time cardinality-agg-low 5.67344 5.19649 -0.47695 ms
100th percentile service time cardinality-agg-low 5.68134 5.23381 -0.44753 ms
error rate cardinality-agg-low 0 0 0 %
Min Throughput cardinality-agg-high 1.42153 1.42885 0.00733 ops/s
Mean Throughput cardinality-agg-high 1.43641 1.44118 0.00476 ops/s
Median Throughput cardinality-agg-high 1.43795 1.44124 0.00328 ops/s
Max Throughput cardinality-agg-high 1.4446 1.44876 0.00415 ops/s
50th percentile latency cardinality-agg-high 19946.7 19916.1 -30.6523 ms
90th percentile latency cardinality-agg-high 27442 27243 -199.024 ms
99th percentile latency cardinality-agg-high 29028.2 28924 -104.155 ms
100th percentile latency cardinality-agg-high 29126.4 29008.8 -117.559 ms
50th percentile service time cardinality-agg-high 676.124 676.268 0.14383 ms
90th percentile service time cardinality-agg-high 711.752 711.737 -0.01544 ms
99th percentile service time cardinality-agg-high 753.453 767.001 13.5484 ms
100th percentile service time cardinality-agg-high 770.629 767.016 -3.6131 ms
error rate cardinality-agg-high 0 0 0 %
Min Throughput cardinality-agg-very-high 0.937082 0.932056 -0.00503 ops/s
Mean Throughput cardinality-agg-very-high 0.942099 0.934835 -0.00726 ops/s
Median Throughput cardinality-agg-very-high 0.942236 0.934668 -0.00757 ops/s
Max Throughput cardinality-agg-very-high 0.945566 0.937255 -0.00831 ops/s
50th percentile latency cardinality-agg-very-high 56693.3 57539 845.717 ms
90th percentile latency cardinality-agg-very-high 78636.8 79977.3 1340.45 ms
99th percentile latency cardinality-agg-very-high 83630.3 84993 1362.66 ms
100th percentile latency cardinality-agg-very-high 83930.3 85266.3 1335.98 ms
50th percentile service time cardinality-agg-very-high 1044.42 1054.68 10.2572 ms
90th percentile service time cardinality-agg-very-high 1086.14 1092.58 6.4436 ms
99th percentile service time cardinality-agg-very-high 1128.19 1141.7 13.5063 ms
100th percentile service time cardinality-agg-very-high 1129.87 1143.92 14.0448 ms
error rate cardinality-agg-very-high 0 0 0 %
Min Throughput range_with_asc_sort 2.01313 2.01314 1e-05 ops/s
Mean Throughput range_with_asc_sort 2.02161 2.02161 0 ops/s
Median Throughput range_with_asc_sort 2.01962 2.01963 1e-05 ops/s
Max Throughput range_with_asc_sort 2.03888 2.03889 0 ops/s
50th percentile latency range_with_asc_sort 7.7813 7.60992 -0.17138 ms
90th percentile latency range_with_asc_sort 8.20366 8.01287 -0.19079 ms
99th percentile latency range_with_asc_sort 8.64974 8.15932 -0.49041 ms
100th percentile latency range_with_asc_sort 8.83228 8.18231 -0.64997 ms
50th percentile service time range_with_asc_sort 6.43563 6.28826 -0.14737 ms
90th percentile service time range_with_asc_sort 6.53422 6.37302 -0.1612 ms
99th percentile service time range_with_asc_sort 7.11886 6.59849 -0.52037 ms
100th percentile service time range_with_asc_sort 7.18298 6.67838 -0.5046 ms
error rate range_with_asc_sort 0 0 0 %
Min Throughput range_with_desc_sort 2.01315 2.01315 0 ops/s
Mean Throughput range_with_desc_sort 2.02165 2.02163 -2e-05 ops/s
Median Throughput range_with_desc_sort 2.01967 2.01964 -3e-05 ops/s
Max Throughput range_with_desc_sort 2.03893 2.03892 -1e-05 ops/s
50th percentile latency range_with_desc_sort 7.72187 7.87712 0.15525 ms
90th percentile latency range_with_desc_sort 8.13061 8.30697 0.17636 ms
99th percentile latency range_with_desc_sort 8.86667 8.60049 -0.26618 ms
100th percentile latency range_with_desc_sort 9.27909 8.67136 -0.60772 ms
50th percentile service time range_with_desc_sort 6.3409 6.50225 0.16135 ms
90th percentile service time range_with_desc_sort 6.52665 6.60199 0.07534 ms
99th percentile service time range_with_desc_sort 7.62325 6.81552 -0.80772 ms
100th percentile service time range_with_desc_sort 8.25589 6.88103 -1.37486 ms
error rate range_with_desc_sort 0 0 0 %

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Dec 1, 2025

Walkthrough

This pull request combines filter rewrite and skip list optimization strategies for histogram sub-aggregations. It introduces a LeafCollectionMode enum to AggregatorBase to track collection strategies, implements HistogramSkiplistLeafCollector for efficient skip-list-based bucketing, refactors DateHistogramAggregator's skiplist logic, and modifies RangeAggregator to toggle collection modes during pre-aggregation optimization.

Changes

Cohort / File(s) Summary
Infrastructure & Mode Management
server/src/main/java/org/opensearch/search/aggregations/AggregatorBase.java
Added LeafCollectionMode enum (NORMAL, FILTER_REWRITE), protected leafCollectorMode field, and public getLeafCollectorMode() getter to enable configurable leaf collection strategies.
Skip List Collector
server/src/main/java/org/opensearch/search/aggregations/bucket/HistogramSkiplistLeafCollector.java
Introduced new HistogramSkiplistLeafCollector class implementing efficient histogram bucketing using skip lists, with support for per-doc and bulk doc processing, range-based fast paths, and sub-collector integration.
Aggregator Implementations
server/src/main/java/org/opensearch/search/aggregations/bucket/histogram/DateHistogramAggregator.java, server/src/main/java/org/opensearch/search/aggregations/bucket/range/RangeAggregator.java
DateHistogramAggregator refactored skiplist usage check into canUseSkiplist() helper and removed inline HistogramSkiplistLeafCollector implementation; RangeAggregator wrapped pre-aggregation optimization in try-finally block to temporarily switch leafCollectorMode to FILTER_REWRITE.
Tests & Documentation
server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java, CHANGELOG.md
Added testRangeDate() test method with helper utilities for index sort setup and multi-segment skiplist-enabled indexing; updated CHANGELOG.md to document the optimization.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Key areas requiring attention:

  • HistogramSkiplistLeafCollector: Complex skip list logic with advanceSkipper boundary computation, fast-path vs direct processing decisions, and interaction with sub-collectors and bucket ordinals
  • leafCollectorMode integration: Verify correct mode propagation between AggregatorBase, DateHistogramAggregator canUseSkiplist() checks, and RangeAggregator's temporary mode toggling
  • Test coverage: Ensure testRangeDate() adequately exercises the skiplist collection path with multi-segment index and date histogram sub-aggregation scenarios

Poem

🐰 A skip list hops through buckets so fast,
Filter rewrites make aggregations last,
Modes dance between NORMAL and REWRITE,
Histograms collect with elegant might,
Optimized ranges reach new heights! 🚀

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 32.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title directly and clearly summarizes the main change: combining filter rewrite and skip list optimizations for sub-aggregations.
Description check ✅ Passed The PR description includes a comprehensive Description section explaining the optimization, related issues are linked, and testing checklist is marked complete. However, API/documentation checklist items are marked as N/A rather than addressed.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (6)
server/src/main/java/org/opensearch/search/aggregations/bucket/histogram/DateHistogramAggregator.java (1)

236-239: Consider adding debug logging for skiplist collector selection.

Given the performance-sensitive nature of this optimization and the benchmark debugging discussed in PR comments, consider adding trace-level logging when the skiplist path is selected. This would help with future performance debugging.

         if (canUseSkiplist(skipper, singleton)) {
             skipListCollectorsUsed++;
+            logger.trace("Using skiplist collector for field: {}", fieldName);
             return new HistogramSkiplistLeafCollector(singleton, skipper, preparedRounding, bucketOrds, sub, this);
         }
server/src/main/java/org/opensearch/search/aggregations/bucket/HistogramSkiplistLeafCollector.java (3)

110-129: Consider caching and validating owningBucketOrd for correctness.

Based on prior discussion, this collector only works correctly when owningBucketOrd remains constant across calls. Consider caching the first owningBucketOrd and either asserting or falling back to non-skiplist behavior if a different value is received:

+    private long cachedOwningBucketOrd = -1;
+
     @Override
     public void collect(int doc, long owningBucketOrd) throws IOException {
+        if (cachedOwningBucketOrd == -1) {
+            cachedOwningBucketOrd = owningBucketOrd;
+        } else {
+            assert cachedOwningBucketOrd == owningBucketOrd : "HistogramSkiplistLeafCollector requires constant owningBucketOrd";
+        }
+
         if (doc > upToInclusive) {
             advanceSkipper(doc, owningBucketOrd);
         }

Based on learnings from past review comments discussing this exact scenario.


146-158: Performance optimization opportunity when sub-collector is NO_OP.

The fast path using stream.count(upToExclusive) is a good optimization. However, consider extracting the sub-collector check outside the loop to avoid repeated NO_OP_COLLECTOR comparisons:

     @Override
     public void collect(DocIdStream stream, long owningBucketOrd) throws IOException {
         // This will only be called if its the sub aggregation
+        final boolean isNoOpSub = (sub == NO_OP_COLLECTOR);
         for (;;) {
             int upToExclusive = upToInclusive + 1;
             if (upToExclusive < 0) { // overflow
                 upToExclusive = Integer.MAX_VALUE;
             }

             if (upToSameBucket) {
-                if (sub == NO_OP_COLLECTOR) {
+                if (isNoOpSub) {
                     // stream.count maybe faster when we don't need to handle sub-aggs
                     long count = stream.count(upToExclusive);

21-25: Add more detailed class-level Javadoc.

The current documentation is minimal. Consider expanding to describe the skip-list optimization strategy, when this collector should be used, and any invariants (e.g., constant owningBucketOrd requirement).

server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java (2)

292-356: Consider adding verification that the skiplist path is actually exercised.

The test correctly verifies functional correctness of the range + date histogram aggregation with skiplist-enabled index configuration. However, it doesn't confirm that the skiplist optimization path was actually taken during execution. Consider adding assertions or instrumentation to verify the optimization triggered (e.g., checking profiling output, using a test hook, or verifying collection mode).


767-836: Consider extracting a helper to reduce duplication.

The method contains three similar blocks for indexing document batches. Each block follows the same pattern of creating documents with date and metric fields, then committing. While the explicit structure aids readability, extracting a helper method like addDocumentBatch(IndexWriter writer, int count, long timestamp, long metric) would reduce repetition and improve maintainability.

Example refactor:

private void addDocumentBatch(IndexWriter writer, int count, long timestamp, long metricValue) throws IOException {
    for (int i = 0; i < count; i++) {
        org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();
        doc.add(SortedNumericDocValuesField.indexedField(dateFieldName, timestamp));
        doc.add(new LongPoint(dateFieldName, timestamp));
        doc.add(new NumericDocValuesField(longFieldName, metricValue));
        doc.add(new LongPoint(longFieldName, metricValue));
        writer.addDocument(doc);
    }
}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 859f7c3 and 5348994.

📒 Files selected for processing (6)
  • CHANGELOG.md (1 hunks)
  • server/src/main/java/org/opensearch/search/aggregations/AggregatorBase.java (3 hunks)
  • server/src/main/java/org/opensearch/search/aggregations/bucket/HistogramSkiplistLeafCollector.java (1 hunks)
  • server/src/main/java/org/opensearch/search/aggregations/bucket/histogram/DateHistogramAggregator.java (4 hunks)
  • server/src/main/java/org/opensearch/search/aggregations/bucket/range/RangeAggregator.java (1 hunks)
  • server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java (5 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
server/src/main/java/org/opensearch/search/aggregations/bucket/HistogramSkiplistLeafCollector.java (1)
server/src/main/java/org/opensearch/search/aggregations/LeafBucketCollector.java (1)
  • LeafBucketCollector (51-179)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (21)
  • GitHub Check: gradle-check
  • GitHub Check: precommit (25, ubuntu-24.04-arm)
  • GitHub Check: precommit (21, ubuntu-latest)
  • GitHub Check: precommit (21, windows-2025, true)
  • GitHub Check: precommit (25, macos-15)
  • GitHub Check: precommit (25, macos-15-intel)
  • GitHub Check: precommit (25, ubuntu-latest)
  • GitHub Check: precommit (21, ubuntu-24.04-arm)
  • GitHub Check: precommit (25, windows-latest)
  • GitHub Check: precommit (21, macos-15)
  • GitHub Check: precommit (21, windows-latest)
  • GitHub Check: precommit (21, macos-15-intel)
  • GitHub Check: Analyze (java)
  • GitHub Check: assemble (21, ubuntu-24.04-arm)
  • GitHub Check: assemble (25, ubuntu-24.04-arm)
  • GitHub Check: detect-breaking-change
  • GitHub Check: assemble (25, ubuntu-latest)
  • GitHub Check: assemble (25, windows-latest)
  • GitHub Check: assemble (21, windows-latest)
  • GitHub Check: assemble (21, ubuntu-latest)
  • GitHub Check: Mend Security Check
🔇 Additional comments (7)
server/src/main/java/org/opensearch/search/aggregations/AggregatorBase.java (1)

76-76: LGTM on the new leaf collection mode API.

The introduction of LeafCollectionMode enum and the protected field provides a clean mechanism for sub-aggregators to detect when their parent is using the filter rewrite optimization path. The mutable protected field is acceptable since aggregators are processed single-threaded per segment context.

Also applies to: 240-255

server/src/main/java/org/opensearch/search/aggregations/bucket/histogram/DateHistogramAggregator.java (1)

298-313: Skiplist eligibility check is well-structured.

The canUseSkiplist helper correctly gates skiplist usage by:

  1. Requiring non-null skipper and singleton
  2. Disabling for hardBounds (with appropriate TODO)
  3. Enabling for top-level aggregations
  4. Checking only the direct parent's mode (addressing prior reviewer feedback)

The instanceof pattern matching on line 309-310 is clean and safe.

server/src/main/java/org/opensearch/search/aggregations/bucket/range/RangeAggregator.java (1)

338-344: LGTM on the mode toggle implementation.

The try-finally pattern correctly sets leafCollectorMode to FILTER_REWRITE before attempting optimization and ensures reset to NORMAL afterward, regardless of success or exception. This aligns with the reviewer feedback to scope the mode change tightly around tryPrecomputeAggregationForLeaf.

The mode must be set before tryOptimize executes because sub-aggregators query getLeafCollectorMode() during their leaf collector instantiation within the optimization path.

server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java (4)

15-16: LGTM!

The new imports are appropriately added to support skiplist-based testing infrastructure, including index sort configuration, multi-segment management, and field data handling.

Also applies to: 20-20, 26-27, 31-33, 36-37, 42-42


628-645: LGTM!

The overload pattern cleanly extends the test infrastructure to support custom IndexSettings while maintaining backward compatibility for existing tests.


739-750: LGTM!

Replacing the hardcoded "timestamp" string with the dateFieldName class field improves consistency and maintainability.


838-843: LGTM!

Simple, focused helper method that improves readability when parsing date strings to timestamps.

@github-project-automation github-project-automation bot moved this from In Progress to Done in Performance Roadmap Dec 1, 2025
@asimmahmood1 asimmahmood1 reopened this Dec 1, 2025
@github-project-automation github-project-automation bot moved this from Done to In Progress in Performance Roadmap Dec 1, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Dec 1, 2025

❌ Gradle check result for 5348994: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

@asimmahmood1
Copy link
Copy Markdown
Contributor

Failed with, retrying


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':plugins:workload-management:yamlRestTest'.
> java.nio.file.NoSuchFileException: /var/jenkins/workspace/gradle-check/search/distribution/archives/linux-tar/build/install/opensearch-3.4.0-SNAPSHOT/logs/gc.log

@github-project-automation github-project-automation bot moved this from In Progress to Done in Performance Roadmap Dec 1, 2025
@asimmahmood1 asimmahmood1 reopened this Dec 1, 2025
@github-project-automation github-project-automation bot moved this from Done to In Progress in Performance Roadmap Dec 1, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Dec 1, 2025

✅ Gradle check result for 5348994: SUCCESS

@jainankitk jainankitk merged commit da18cc6 into opensearch-project:main Dec 2, 2025
93 of 98 checks passed
@github-project-automation github-project-automation bot moved this from In Progress to Done in Performance Roadmap Dec 2, 2025
@jainankitk jainankitk deleted the agg-perf branch December 2, 2025 00:39
rgsriram pushed a commit to rgsriram/OpenSearch that referenced this pull request Dec 5, 2025
…pensearch-project#19573)

Signed-off-by: Ankit Jain <jainankitk@apache.org>
Signed-off-by: Asim Mahmood <asim.seng@gmail.com>
Co-authored-by: Asim Mahmood <asim.seng@gmail.com>
liuguoqingfz pushed a commit to liuguoqingfz/OpenSearch that referenced this pull request Dec 15, 2025
…pensearch-project#19573)

Signed-off-by: Ankit Jain <jainankitk@apache.org>
Signed-off-by: Asim Mahmood <asim.seng@gmail.com>
Co-authored-by: Asim Mahmood <asim.seng@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants