highlights.asciidoc 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. [[release-highlights]]
  2. == What's new in {minor-version}
  3. coming::[{minor-version}]
  4. Here are the highlights of what's new and improved in {es} {minor-version}!
  5. ifeval::["{release-state}"!="unreleased"]
  6. For detailed information about this release, see the <<es-release-notes>> and
  7. <<breaking-changes>>.
  8. // Add previous release to the list
  9. Other versions:
  10. {ref-bare}/8.15/release-highlights.html[8.15]
  11. | {ref-bare}/8.14/release-highlights.html[8.14]
  12. | {ref-bare}/8.13/release-highlights.html[8.13]
  13. | {ref-bare}/8.12/release-highlights.html[8.12]
  14. | {ref-bare}/8.11/release-highlights.html[8.11]
  15. | {ref-bare}/8.10/release-highlights.html[8.10]
  16. | {ref-bare}/8.9/release-highlights.html[8.9]
  17. | {ref-bare}/8.8/release-highlights.html[8.8]
  18. | {ref-bare}/8.7/release-highlights.html[8.7]
  19. | {ref-bare}/8.6/release-highlights.html[8.6]
  20. | {ref-bare}/8.5/release-highlights.html[8.5]
  21. | {ref-bare}/8.4/release-highlights.html[8.4]
  22. | {ref-bare}/8.3/release-highlights.html[8.3]
  23. | {ref-bare}/8.2/release-highlights.html[8.2]
  24. | {ref-bare}/8.1/release-highlights.html[8.1]
  25. | {ref-bare}/8.0/release-highlights.html[8.0]
  26. endif::[]
  27. // tag::notable-highlights[]
  28. [discrete]
  29. [[esql_inlinestats]]
  30. === ESQL: INLINESTATS
  31. This adds the `INLINESTATS` command to ESQL which performs a STATS and
  32. then enriches the results into the output stream. So, this query:
  33. [source,esql]
  34. ----
  35. FROM test
  36. | INLINESTATS m=MAX(a * b) BY b
  37. | WHERE m == a * b
  38. | SORT a DESC, b DESC
  39. | LIMIT 3
  40. ----
  41. Produces output like:
  42. | a | b | m |
  43. | --- | --- | ----- |
  44. | 99 | 999 | 98901 |
  45. | 99 | 998 | 98802 |
  46. | 99 | 997 | 98703 |
  47. {es-pull}109583[#109583]
  48. [discrete]
  49. [[always_allow_rebalancing_by_default]]
  50. === Always allow rebalancing by default
  51. In earlier versions of {es} the `cluster.routing.allocation.allow_rebalance` setting defaults to
  52. `indices_all_active` which blocks all rebalancing moves while the cluster is in `yellow` or `red` health. This was
  53. appropriate for the legacy allocator which might do too many rebalancing moves otherwise. Today's allocator has
  54. better support for rebalancing a cluster that is not in `green` health, and expects to be able to rebalance some
  55. shards away from over-full nodes to avoid allocating shards to undesirable locations in the first place. From
  56. version 8.16 `allow_rebalance` setting defaults to `always` unless the legacy allocator is explicitly enabled.
  57. {es-pull}111015[#111015]
  58. [discrete]
  59. [[add_global_retention_in_data_stream_lifecycle]]
  60. === Add global retention in data stream lifecycle
  61. Data stream lifecycle now supports configuring retention on a cluster level,
  62. namely global retention. Global retention \nallows us to configure two different
  63. retentions:
  64. - `data_streams.lifecycle.retention.default` is applied to all data streams managed
  65. by the data stream lifecycle that do not have retention defined on the data stream level.
  66. - `data_streams.lifecycle.retention.max` is applied to all data streams managed by the
  67. data stream lifecycle and it allows any data stream \ndata to be deleted after the `max_retention` has passed.
  68. {es-pull}111972[#111972]
  69. [discrete]
  70. [[enable_zstandard_compression_for_indices_with_index_codec_set_to_best_compression]]
  71. === Enable ZStandard compression for indices with index.codec set to best_compression
  72. Before DEFLATE compression was used to compress stored fields in indices with index.codec index setting set to
  73. best_compression, with this change ZStandard is used as compression algorithm to stored fields for indices with
  74. index.codec index setting set to best_compression. The usage ZStandard results in less storage usage with a
  75. similar indexing throughput depending on what options are used. Experiments with indexing logs have shown that
  76. ZStandard offers ~12% lower storage usage and a ~14% higher indexing throughput compared to DEFLATE.
  77. {es-pull}112665[#112665]
  78. [discrete]
  79. [[8_x_remove_zstd_feature_flag_for_index_codec_best_compression]]
  80. === [8.x] Remove zstd feature flag for index codec best compression
  81. Backports the following commits to 8.x: - Remove zstd feature flag for
  82. index codec best compression. (#112665)
  83. {es-pull}112857[#112857]
  84. // end::notable-highlights[]
  85. [discrete]
  86. [[esql_multi_value_fields_supported_in_geospatial_predicates]]
  87. === ESQL: Multi-value fields supported in Geospatial predicates
  88. Supporting multi-value fields in `WHERE` predicates is a challenge due to not knowing whether `ALL` or `ANY`
  89. of the values in the field should pass the predicate.
  90. For example, should the field `age:[10,30]` pass the predicate `WHERE age>20` or not?
  91. This ambiguity does not exist with the spatial predicates
  92. `ST_INTERSECTS` and `ST_DISJOINT`, because the choice between `ANY` or `ALL`
  93. is implied by the predicate itself.
  94. Consider a predicate checking a field named `location` against a test geometry named `shape`:
  95. * `ST_INTERSECTS(field, shape)` - true if `ANY` value can intersect the shape
  96. * `ST_DISJOINT(field, shape)` - true only if `ALL` values are disjoint from the shape
  97. This works even if the shape argument is itself a complex or compound geometry.
  98. Similar logic exists for `ST_CONTAINS` and `ST_WITHIN` predicates, but these are not as easily solved
  99. with `ANY` or `ALL`, because a collection of geometries contains another collection if each of the contained
  100. geometries is within at least one of the containing geometries. Evaluating this requires that the multi-value
  101. field is first combined into a single geometry before performing the predicate check.
  102. * `ST_CONTAINS(field, shape)` - true if the combined geometry contains the shape
  103. * `ST_WITHIN(field, shape)` - true if the combined geometry is within the shape
  104. {es-pull}112063[#112063]