Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: elastic/elasticsearch-java
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v7.17.8
Choose a base ref
...
head repository: elastic/elasticsearch-java
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v7.17.9
Choose a head ref
  • 9 commits
  • 108 files changed
  • 3 contributors

Commits on Dec 8, 2022

  1. Bumps 7.17 to 7.17.9

    elasticmachine authored and picandocodigo committed Dec 8, 2022
    Copy the full SHA
    7b429c1 View commit details

Commits on Jan 4, 2023

  1. Partially verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    We cannot verify signatures from co-authors, and some of the co-authors attributed to this commit require their commits to be signed.
    Copy the full SHA
    867cb10 View commit details
  2. Add bulk ingester helper (#474) (#475)

    Co-authored-by: Sylvain Wallez <sylvain@elastic.co>
    github-actions[bot] and swallez authored Jan 4, 2023
    Copy the full SHA
    c976139 View commit details

Commits on Jan 10, 2023

  1. Copy the full SHA
    49c4c41 View commit details

Commits on Jan 16, 2023

  1. Copy the full SHA
    a2cb95b View commit details
  2. Copy the full SHA
    3850f52 View commit details

Commits on Jan 18, 2023

  1. Add buffered lookahead for Jackson (#489) (#490)

    Co-authored-by: Sylvain Wallez <sylvain@elastic.co>
    github-actions[bot] and swallez authored Jan 18, 2023
    Copy the full SHA
    9592a6c View commit details

Commits on Jan 24, 2023

  1. Copy the full SHA
    a01ced8 View commit details
  2. Copy the full SHA
    c03c17e View commit details
Showing with 2,672 additions and 298 deletions.
  1. +1 −1 config/version.txt
  2. +43 −5 docs/usage/indexing-bulk.asciidoc
  3. +3 −0 java-client/build.gradle.kts
  4. +468 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk/BulkIngester.java
  5. +65 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk/BulkListener.java
  6. +137 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk/FnCondition.java
  7. +214 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk/IngesterOperation.java
  8. +23 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/package-info.java
  9. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/AcknowledgedResponseBase.java
  10. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/BaseNode.java
  11. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/IndicesResponseBase.java
  12. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/RequestBase.java
  13. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/ScriptBase.java
  14. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/ShardsOperationResponseBase.java
  15. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/WriteResponseBase.java
  16. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/AggregateBase.java
  17. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/AggregationBase.java
  18. +1 −1 ...ent/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/BucketAggregationBase.java
  19. +1 −1 ...nt/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/ExtendedStatsAggregate.java
  20. +1 −1 ...c/main/java/co/elastic/clients/elasticsearch/_types/aggregations/FormatMetricAggregationBase.java
  21. +1 −1 .../main/java/co/elastic/clients/elasticsearch/_types/aggregations/FormattableMetricAggregation.java
  22. +1 −1 ...-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MatrixAggregation.java
  23. +1 −1 ...ent/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MetricAggregationBase.java
  24. +1 −1 .../main/java/co/elastic/clients/elasticsearch/_types/aggregations/MovingAverageAggregationBase.java
  25. +1 −1 .../src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MultiBucketAggregateBase.java
  26. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MultiBucketBase.java
  27. +70 −0 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MultiTermLookup.java
  28. +1 −1 .../src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/PercentilesAggregateBase.java
  29. +1 −1 ...t/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/PipelineAggregationBase.java
  30. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/RangeAggregate.java
  31. +1 −1 ...main/java/co/elastic/clients/elasticsearch/_types/aggregations/SignificantTermsAggregateBase.java
  32. +1 −1 ...rc/main/java/co/elastic/clients/elasticsearch/_types/aggregations/SignificantTermsBucketBase.java
  33. +1 −1 ...src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/SingleBucketAggregateBase.java
  34. +1 −1 ...src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/SingleMetricAggregateBase.java
  35. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/StatsAggregate.java
  36. +1 −1 ...client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/TermsAggregateBase.java
  37. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/TermsBucketBase.java
  38. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CharFilterBase.java
  39. +1 −1 ...t/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CompoundWordTokenFilterBase.java
  40. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenFilterBase.java
  41. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenizerBase.java
  42. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/CorePropertyBase.java
  43. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/DocValuesPropertyBase.java
  44. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/DynamicProperty.java
  45. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/NumberPropertyBase.java
  46. +5 −5 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/Property.java
  47. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/PropertyBase.java
  48. +2 −2 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/PropertyBuilders.java
  49. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/RangePropertyBase.java
  50. +1 −1 ...-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/StandardNumberProperty.java
  51. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/DecayFunctionBase.java
  52. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/QueryBase.java
  53. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/RangeQueryBase.java
  54. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/RankFeatureFunction.java
  55. +1 −1 .../src/main/java/co/elastic/clients/elasticsearch/async_search/AsyncSearchDocumentResponseBase.java
  56. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/async_search/AsyncSearchResponseBase.java
  57. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/autoscaling/AutoscalingPolicy.java
  58. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/cat/CatRequestBase.java
  59. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/BulkOperationBase.java
  60. +48 −7 java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/UpdateOperation.java
  61. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/WriteOperation.java
  62. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/get/GetResult.java
  63. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/msearch/MultiSearchResult.java
  64. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/rank_eval/RankEvalMetricBase.java
  65. +1 −1 ...t/src/main/java/co/elastic/clients/elasticsearch/core/rank_eval/RankEvalMetricRatingTreshold.java
  66. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/HighlightBase.java
  67. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/ResponseBody.java
  68. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SuggestBase.java
  69. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SuggesterBase.java
  70. +24 −24 java-client/src/main/java/co/elastic/clients/elasticsearch/doc-files/api-spec.html
  71. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/eql/EqlSearchResponseBase.java
  72. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/ProcessorBase.java
  73. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysisBase.java
  74. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeEvaluationMetrics.java
  75. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/ml/TrainedModelConfig.java
  76. +1 −1 ...c/main/java/co/elastic/clients/elasticsearch/ml/evaluate_data_frame/DataframeEvaluationValue.java
  77. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/nodes/MemoryStats.java
  78. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/nodes/NodesResponseBase.java
  79. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/security/User.java
  80. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/tasks/ListResponse.java
  81. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/HttpInputRequestDefinition.java
  82. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/stats/WatchRecordQueuedStats.java
  83. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/xpack/usage/Base.java
  84. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/xpack/usage/Counter.java
  85. +1 −1 java-client/src/main/java/co/elastic/clients/elasticsearch/xpack/usage/FeatureToggle.java
  86. +48 −25 java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java
  87. +46 −0 java-client/src/main/java/co/elastic/clients/json/LookAheadJsonParser.java
  88. +28 −15 java-client/src/main/java/co/elastic/clients/json/UnionDeserializer.java
  89. +100 −2 java-client/src/main/java/co/elastic/clients/json/jackson/JacksonJsonpParser.java
  90. +12 −0 java-client/src/main/java/co/elastic/clients/transport/Endpoint.java
  91. +120 −0 java-client/src/main/java/co/elastic/clients/transport/rest_client/MultiBufferEntity.java
  92. +39 −9 java-client/src/main/java/co/elastic/clients/transport/rest_client/RestClientTransport.java
  93. +108 −0 java-client/src/main/java/co/elastic/clients/util/BinaryData.java
  94. +51 −0 java-client/src/main/java/co/elastic/clients/util/NoCopyByteArrayOutputStream.java
  95. +100 −18 java-client/src/test/java/co/elastic/clients/documentation/usage/IndexingBulkTest.java
  96. +501 −0 java-client/src/test/java/co/elastic/clients/elasticsearch/_helpers/bulk/BulkIngesterTest.java
  97. +0 −98 java-client/src/test/java/co/elastic/clients/elasticsearch/json/jackson/JacksonJsonpParserTest.java
  98. +8 −0 java-client/src/test/java/co/elastic/clients/elasticsearch/model/VariantsTest.java
  99. +1 −7 java-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/JsonDataTest.java
  100. +1 −1 java-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/JsonpDeserializerTest.java
  101. +1 −1 java-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/JsonpMapperTest.java
  102. +1 −3 java-client/src/test/java/co/elastic/clients/json/JsonpMappingExceptionTest.java
  103. +11 −1 java-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/JsonpUtilsTest.java
  104. +191 −0 java-client/src/test/java/co/elastic/clients/json/jackson/JacksonJsonpParserTest.java
  105. +1 −1 java-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/jackson/JacksonMapperTest.java
  106. +1 −1 ...-client/src/test/java/co/elastic/clients/{elasticsearch → }/json/jackson/JsonValueParserTest.java
  107. +29 −0 java-client/src/test/java/co/elastic/clients/transport/endpoints/BinaryEndpointTest.java
  108. +99 −0 java-client/src/test/java/co/elastic/clients/transport/rest_client/MultiBufferEntityTest.java
2 changes: 1 addition & 1 deletion config/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.17.8
7.17.9
48 changes: 43 additions & 5 deletions docs/usage/indexing-bulk.asciidoc
Original file line number Diff line number Diff line change
@@ -30,23 +30,61 @@ include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[bulk-objects]
[discrete]
==== Indexing raw JSON data

The `document` property of a bulk index request can be any object that can be serialized to JSON using your Elasticsearch client's JSON mapper. In the example below we will use the {java-client}'s `JsonData` object to read json files from a log directory and send them in a bulk request.
The `document` property of a bulk index request can be any object that can be serialized to JSON using your Elasticsearch client's JSON mapper. However, data that is ingested in bulk is often available as JSON text (e.g. files on disk), and parsing this JSON just to re-serialize it to send the bulk request would be a waste of resources. So documents in bulk operations can also be of type `BinaryData` that are sent verbatim (without parsing) to the {es} server.

Since `JsonData` doesn't allow reading directly from an input stream (this will be added in a future release), we will use the following function for that:
In the example below we will use the {java-client}'s `BinaryData` to read json files from a log directory and send them in a bulk request.

["source","java"]
--------------------------------------------------
include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[read-json]
include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[bulk-json]
--------------------------------------------------

We can now read the contents of the log directory and send it to {es}:
[discrete]
==== Streaming ingestion with the Bulk Ingester

The `BulkIngester` simplifies the usage of the Bulk API by providing a utility class that allows index/update/delete operations to be transparently grouped in bulk requests. You only have to `add()` bulk operations to the ingester and
it will take care of grouping and sending them in bulk according to its configuration.

The ingester will send a bulk request when one of the following criteria is met:

- the number of operations exceeds a maximum (defaults to 1000)
- the bulk request size in bytes exceeds a maximum (defaults to 5 MiB)
- a delay since the last request has expired (periodic flush, no default)

Additionally, you can define a maximum number of concurrent request waiting to be executed by {es} (defaults to 1). When that maximum is reached and the maximum number of operations have been collected, adding a new operation to the indexer will block. This is avoids overloading the {es} server by putting backpressure on the client application.

["source","java"]
--------------------------------------------------
include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[bulk-json]
include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[bulk-ingester-setup]
--------------------------------------------------
<1> Sets the {es} client used to send bulk requests.
<2> Sets the maximum number of operations to collect before sending a bulk request.
<3> Sets the flush interval.
<4> Adds a bulk operation to the ingester.
<5> Closes the ingester to flush the pending operations and release resources.

Additionally, the bulk ingester accepts a listener so that your application can be notified of bulk requests that are
sent and their result. To allow correlating bulk operations to application context, the `add()` method optionally
accepts a `context` parameter. The type of this context parameter is used as the generic parameter of the `BulkIngester`
object. You may have noticed the `Void` type in `BulkIngester<Void>` above: this is because we did not register a listener,
and therefore did not care about context values.

The following example shows how you can use context values to implement a bulk ingestion listener: as previously it
sends JSON log files in bulk, but tracks bulk request errors and failed operations. When an operation fails, depending on the error type you may want to re-add it to the ingester.

["source","java"]
--------------------------------------------------
include-tagged::{doc-tests-src}/usage/IndexingBulkTest.java[bulk-ingester-context]
--------------------------------------------------
<1> Creates a listener where context values are strings for the ingested file name.
<2> Registers the listener on the bulk ingester.
<3> Sets the file name as the context value for a bulk operation.

The bulk ingest also exposes statistic information that allows monitoring the ingestion process and tune its configuration:

- number of operations added,
- number of calls to `add()` that were blocked because the maximum number of concurrent requests was reached (contention),
- number of bulk requests sent,
- number of bulk requests that were blocked because the maximum number of concurrent requests was reached.

{doc-tests-blurb}
3 changes: 3 additions & 0 deletions java-client/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -216,6 +216,9 @@ dependencies {
exclude(group = "org.glassfish", module = "jakarta.json")
}

// Apache-2.0
testImplementation("commons-io:commons-io:2.11.0")

// EPL-2.0
// https://junit.org/junit5/
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2")
Loading