highlights.asciidoc 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. [[stored_fields_are_compressed_with_zstandard_instead_of_lz4_deflate]]
  30. === Stored fields are now compressed with ZStandard instead of LZ4/DEFLATE
  31. Stored fields are now compressed by splitting documents into blocks, which
  32. are then compressed independently with ZStandard. `index.codec: default`
  33. (default) uses blocks of at most 14kB or 128 documents compressed with level
  34. 0, while `index.codec: best_compression` uses blocks of at most 240kB or
  35. 2048 documents compressed at level 3. On most datasets that we tested
  36. against, this yielded storage improvements in the order of 10%, slightly
  37. faster indexing and similar retrieval latencies.
  38. {es-pull}103374[#103374]
  39. [discrete]
  40. [[stricter_failure_handling_in_multi_repo_get_snapshots_request_handling]]
  41. === Stricter failure handling in multi-repo get-snapshots request handling
  42. If a multi-repo get-snapshots request encounters a failure in one of the
  43. targeted repositories then earlier versions of Elasticsearch would proceed
  44. as if the faulty repository did not exist, except for a per-repository
  45. failure report in a separate section of the response body. This makes it
  46. impossible to paginate the results properly in the presence of failures. In
  47. versions 8.15.0 and later this API's failure handling behaviour has been
  48. made stricter, reporting an overall failure if any targeted repository's
  49. contents cannot be listed.
  50. {es-pull}107191[#107191]
  51. [discrete]
  52. [[add_new_int4_quantization_to_dense_vector]]
  53. === Add new int4 quantization to dense_vector
  54. New int4 (half-byte) scalar quantization support via two knew index types: `int4_hnsw` and `int4_flat`.
  55. This gives an 8x reduction from `float32` with some accuracy loss. In addition to less memory required, this
  56. improves query and merge speed significantly when compared to raw vectors.
  57. {es-pull}109317[#109317]
  58. [discrete]
  59. [[esql_inlinestats]]
  60. === ESQL: INLINESTATS
  61. This adds the `INLINESTATS` command to ESQL which performs a STATS and
  62. then enriches the results into the output stream. So, this query:
  63. [source,esql]
  64. ----
  65. FROM test
  66. | INLINESTATS m=MAX(a * b) BY b
  67. | WHERE m == a * b
  68. | SORT a DESC, b DESC
  69. | LIMIT 3
  70. ----
  71. Produces output like:
  72. | a | b | m |
  73. | --- | --- | ----- |
  74. | 99 | 999 | 98901 |
  75. | 99 | 998 | 98802 |
  76. | 99 | 997 | 98703 |
  77. {es-pull}109583[#109583]
  78. [discrete]
  79. [[mark_query_rules_as_ga]]
  80. === Mark Query Rules as GA
  81. This PR marks query rules as Generally Available. All APIs are no longer
  82. in tech preview.
  83. {es-pull}110004[#110004]
  84. [discrete]
  85. [[adds_new_bit_element_type_for_dense_vectors]]
  86. === Adds new `bit` `element_type` for `dense_vectors`
  87. This adds `bit` vector support by adding `element_type: bit` for
  88. vectors. This new element type works for indexed and non-indexed
  89. vectors. Additionally, it works with `hnsw` and `flat` index types. No
  90. quantization based codec works with this element type, this is
  91. consistent with `byte` vectors.
  92. `bit` vectors accept up to `32768` dimensions in size and expect vectors
  93. that are being indexed to be encoded either as a hexidecimal string or a
  94. `byte[]` array where each element of the `byte` array represents `8`
  95. bits of the vector.
  96. `bit` vectors support script usage and regular query usage. When
  97. indexed, all comparisons done are `xor` and `popcount` summations (aka,
  98. hamming distance), and the scores are transformed and normalized given
  99. the vector dimensions.
  100. For scripts, `l1norm` is the same as `hamming` distance and `l2norm` is
  101. `sqrt(l1norm)`. `dotProduct` and `cosineSimilarity` are not supported.
  102. Note, the dimensions expected by this element_type are always to be
  103. divisible by `8`, and the `byte[]` vectors provided for index must be
  104. have size `dim/8` size, where each byte element represents `8` bits of
  105. the vectors.
  106. {es-pull}110059[#110059]
  107. [discrete]
  108. [[redact_processor_generally_available]]
  109. === The Redact processor is Generally Available
  110. The Redact processor uses the Grok rules engine to obscure text in the input document matching the given Grok patterns. The Redact processor was initially released as Technical Preview in `8.7.0`, and is now released as Generally Available.
  111. {es-pull}110395[#110395]
  112. [discrete]
  113. [[always_allow_rebalancing_by_default]]
  114. === Always allow rebalancing by default
  115. In earlier versions of {es} the `cluster.routing.allocation.allow_rebalance` setting defaults to
  116. `indices_all_active` which blocks all rebalancing moves while the cluster is in `yellow` or `red` health. This was
  117. appropriate for the legacy allocator which might do too many rebalancing moves otherwise. Today's allocator has
  118. better support for rebalancing a cluster that is not in `green` health, and expects to be able to rebalance some
  119. shards away from over-full nodes to avoid allocating shards to undesirable locations in the first place. From
  120. version 8.16 `allow_rebalance` setting defaults to `always` unless the legacy allocator is explicitly enabled.
  121. {es-pull}111015[#111015]
  122. // end::notable-highlights[]
  123. [discrete]
  124. [[new_custom_parser_for_iso_8601_datetimes]]
  125. === New custom parser for ISO-8601 datetimes
  126. This introduces a new custom parser for ISO-8601 datetimes, for the `iso8601`, `strict_date_optional_time`, and
  127. `strict_date_optional_time_nanos` built-in date formats. This provides a performance improvement over the
  128. default Java date-time parsing. Whilst it maintains much of the same behaviour,
  129. the new parser does not accept nonsensical date-time strings that have multiple fractional seconds fields
  130. or multiple timezone specifiers. If the new parser fails to parse a string, it will then use the previous parser
  131. to parse it. If a large proportion of the input data consists of these invalid strings, this may cause
  132. a small performance degradation. If you wish to force the use of the old parsers regardless,
  133. set the JVM property `es.datetime.java_time_parsers=true` on all ES nodes.
  134. {es-pull}106486[#106486]
  135. [discrete]
  136. [[new_custom_parser_for_more_iso_8601_date_formats]]
  137. === New custom parser for more ISO-8601 date formats
  138. Following on from #106486, this extends the custom ISO-8601 datetime parser to cover the `strict_year`,
  139. `strict_year_month`, `strict_date_time`, `strict_date_time_no_millis`, `strict_date_hour_minute_second`,
  140. `strict_date_hour_minute_second_millis`, and `strict_date_hour_minute_second_fraction` date formats.
  141. As before, the parser will use the existing java.time parser if there are parsing issues, and the
  142. `es.datetime.java_time_parsers=true` JVM property will force the use of the old parsers regardless.
  143. {es-pull}108606[#108606]
  144. [discrete]
  145. [[preview_support_for_connection_type_domain_isp_databases_in_geoip_processor]]
  146. === Preview: Support for the 'Connection Type, 'Domain', and 'ISP' databases in the geoip processor
  147. As a Technical Preview, the {ref}/geoip-processor.html[`geoip`] processor can now use the commercial
  148. https://dev.maxmind.com/geoip/docs/databases/connection-type[GeoIP2 'Connection Type'],
  149. https://dev.maxmind.com/geoip/docs/databases/domain[GeoIP2 'Domain'],
  150. and
  151. https://dev.maxmind.com/geoip/docs/databases/isp[GeoIP2 'ISP']
  152. databases from MaxMind.
  153. {es-pull}108683[#108683]
  154. [discrete]
  155. [[update_elasticsearch_to_lucene_9_11]]
  156. === Update Elasticsearch to Lucene 9.11
  157. Elasticsearch is now updated using the latest Lucene version 9.11.
  158. Here are the full release notes:
  159. But, here are some particular highlights:
  160. - Usage of MADVISE for better memory management: https://github.com/apache/lucene/pull/13196
  161. - Use RWLock to access LRUQueryCache to reduce contention: https://github.com/apache/lucene/pull/13306
  162. - Speedup multi-segment HNSW graph search for nested kNN queries: https://github.com/apache/lucene/pull/13121
  163. - Add a MemorySegment Vector scorer - for scoring without copying on-heap vectors: https://github.com/apache/lucene/pull/13339
  164. {es-pull}109219[#109219]
  165. [discrete]
  166. [[synthetic_source_improvements]]
  167. === Synthetic `_source` improvements
  168. There are multiple improvements to synthetic `_source` functionality:
  169. * Synthetic `_source` is now supported for all field types including `nested` and `object`. `object` fields are supported with `enabled` set to `false`.
  170. * Synthetic `_source` can be enabled together with `ignore_malformed` and `ignore_above` parameters for all field types that support them.
  171. {es-pull}109501[#109501]
  172. [discrete]
  173. [[index_sorting_on_indexes_with_nested_fields]]
  174. === Index sorting on indexes with nested fields
  175. Index sorting is now supported for indexes with mappings containing nested objects.
  176. The index sort spec (as specified by `index.sort.field`) can't contain any nested
  177. fields, still.
  178. {es-pull}110251[#110251]