Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.elasticsearch.client.documentation;

import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.support.WriteRequest;
import org.elasticsearch.client.ESRestHighLevelClientTestCase;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.VersionType;
import org.elasticsearch.rest.RestStatus;

import java.io.IOException;

/**
* This class is used to generate the Java Delete API documentation.
* You need to wrap your code between two tags like:
* // tag::example[]
* // end::example[]
*
* Where example is your tag name.
*
* Then in the documentation, you can extract what is between tag and end tags with
* ["source","java",subs="attributes,callouts"]
* --------------------------------------------------
* sys2::[perl -ne 'exit if /end::example/; print if $tag; $tag = $tag || /tag::example/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
* --------------------------------------------------
*/
public class DeleteDocumentationIT extends ESRestHighLevelClientTestCase {

/**
* This test documents docs/java-rest/high-level/document/delete.asciidoc
*/
public void testDelete() throws IOException {
RestHighLevelClient client = highLevelClient();

// tag::delete-request[]
DeleteRequest request = new DeleteRequest(
"index", // <1>
"type", // <2>
"id"); // <3>
// end::delete-request[]

// tag::delete-request-props[]
request.timeout(TimeValue.timeValueSeconds(1)); // <1>
request.timeout("1s"); // <2>
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); // <3>
request.setRefreshPolicy("wait_for"); // <4>
request.version(2); // <5>
request.versionType(VersionType.EXTERNAL); // <6>
// end::delete-request-props[]

// tag::delete-execute[]
DeleteResponse response = client.delete(request);
// end::delete-execute[]

try {
// tag::delete-notfound[]
if (response.getResult().equals(DocWriteResponse.Result.NOT_FOUND)) {
throw new Exception("Can't find document to be removed"); // <1>
}
// end::delete-notfound[]
} catch (Exception ignored) { }

// tag::delete-execute-async[]
client.deleteAsync(request, new ActionListener<DeleteResponse>() {
@Override
public void onResponse(DeleteResponse deleteResponse) {
// <1>
}

@Override
public void onFailure(Exception e) {
// <2>
}
});
// end::delete-execute-async[]

// tag::delete-conflict[]
try {
client.delete(request);
} catch (ElasticsearchException exception) {
if (exception.status().equals(RestStatus.CONFLICT)) {
// <1>
}
}
// end::delete-conflict[]

}
}
10 changes: 10 additions & 0 deletions docs/java-rest/high-level/apis.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
* index API

* get API

* <<java-rest-high-document-delete>>

* bulk API

* search API

67 changes: 67 additions & 0 deletions docs/java-rest/high-level/document/delete.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[[java-rest-high-document-delete]]
=== Delete API

[[java-rest-high-document-delete-request]]
==== Delete Request

The most simple Delete Request needs is:

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-request/; print if $tag; $tag = $tag || /tag::delete-request/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------
<1> Index name
<2> Type
<3> Document id

You can also provide the following properties:

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-request-props/; print if $tag; $tag = $tag || /tag::delete-request-props/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------
<1> Timeout
<2> Timeout as String
<3> Refresh policy
<4> Refresh policy as String
<5> Version
<6> Version type

[[java-rest-high-document-delete-sync]]
==== Execution

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-execute/; print if $tag; $tag = $tag || /tag::delete-execute/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------

[[java-rest-high-document-delete-async]]
==== Asynchronous Execution

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-execute-async/; print if $tag; $tag = $tag || /tag::delete-execute-async/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------
<1> Implement if needed when execution did not throw an exception
<2> Implement if needed in case of failure

[[java-rest-high-document-delete-response]]
==== Delete Response

In the Delete Response object, you can check for example the result of the operation:

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-notfound/; print if $tag; $tag = $tag || /tag::delete-notfound/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------
<1> Do something if we did not find the document which should have been deleted

Note that if you have a version conflict because you defined the version within the
<<java-rest-high-document-delete-request>>, it will raise an `ElasticsearchException` like:

["source","java",subs="attributes,callouts"]
--------------------------------------------------
sys2::[perl -ne 'exit if /end::delete-conflict/; print if $tag; $tag = $tag || /tag::delete-conflict/' {docdir}/../../client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/DeleteDocumentationIT.java]
--------------------------------------------------
<1> We got a version conflict

1 change: 1 addition & 0 deletions docs/java-rest/high-level/document/index.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include::delete.asciidoc[]
14 changes: 14 additions & 0 deletions docs/java-rest/high-level/index.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[[java-rest-high]]
== Java High Level REST Client

The <<java-rest-high>>'s features include:

include::apis.asciidoc[]

It depends on elasticsearch core project as it uses elasticsearch request and response
objects so it will simplify a migration from the transport client.


include::usage.asciidoc[]

include::document/index.asciidoc[]
75 changes: 75 additions & 0 deletions docs/java-rest/high-level/usage.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
[[java-rest-high-usage]]
=== Getting started

[[java-rest-high-usage-maven]]
==== Maven Repository

The high-level Java REST client is hosted on
http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.elasticsearch.client%22[Maven
Central]. The minimum Java version required is `1.8`.

The high-level REST client is subject to the same release cycle as
elasticsearch. Replace the version with the desired client version.

[[java-rest-high-usage-maven-maven]]
===== Maven configuration

Here is how you can configure the dependency using maven as a dependency manager.
Add the following to your `pom.xml` file:

["source","xml",subs="attributes"]
--------------------------------------------------
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>rest-high-level</artifactId>
<version>{version}</version>
</dependency>
--------------------------------------------------

[[java-rest-high-usage-maven-gradle]]
===== Gradle configuration

Here is how you can configure the dependency using gradle as a dependency manager.
Add the following to your `build.gradle` file:

["source","groovy",subs="attributes"]
--------------------------------------------------
dependencies {
compile 'org.elasticsearch.client:rest-high-level:{version}'
}
--------------------------------------------------

[[java-rest-high-usage-dependencies]]
==== Dependencies

The high-level Java REST client depends on the following artifacts and their
transitive dependencies:

- org.elasticsearch.client:rest
- org.elasticsearch:elasticsearch


[[java-rest-high-usage-initialization]]
==== Initialization

A `RestHighLevelClient` instance needs a <<java-rest-low-usage-initialization,REST low-level client>>
to be built as follows:

[source,java]
--------------------------------------------------
RestHighLevelClient client =
new RestHighLevelClient(lowLevelRestClient); <1>
--------------------------------------------------
<1> We pass the <<java-rest-low-usage-initialization,REST low-level client>> instance

In the rest of this documentation about the high-level client, the `RestHighLevelClient` instance
will be referenced as `client`.

Then you have access to the high level APIs such as:

include::apis.asciidoc[]
Copy link
Member

Choose a reason for hiding this comment

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

Link instead of include here? I'm not sure.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I found out that it gives a better documentation as the guy does not have to clic but has everything at hand.

Copy link
Member

Choose a reason for hiding this comment

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

Sure.


Each API can be executed synchronously (i.e. <<java-rest-high-document-delete,`delete`>>) or
asynchronously (i.e. <<java-rest-high-document-delete,`deleteAsync`>>).
The asynchronous APIs require a listener that is called on thread pool managed by the low level client
when the response is received.
6 changes: 3 additions & 3 deletions docs/java-rest/index.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ include::../Versions.asciidoc[]

include::overview.asciidoc[]

include::usage.asciidoc[]
include::low-level/index.asciidoc[]

include::configuration.asciidoc[]
include::high-level/index.asciidoc[]

include::sniffer.asciidoc[]
include::license.asciidoc[]
17 changes: 17 additions & 0 deletions docs/java-rest/license.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[[java-rest-license]]
== License

Copyright 2013-2017 Elasticsearch

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
== Common configuration
=== Common configuration

The `RestClientBuilder` supports providing both a `RequestConfigCallback` and
an `HttpClientConfigCallback` which allow for any customization that the Apache
Expand All @@ -8,7 +8,7 @@ configuration that the `RestClient` is initialized with. This section
describes some common scenarios that require additional configuration for the
low-level Java REST Client.

=== Timeouts
==== Timeouts

Configuring requests timeouts can be done by providing an instance of
`RequestConfigCallback` while building the `RestClient` through its builder.
Expand All @@ -34,7 +34,7 @@ RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.build();
--------------------------------------------------

=== Number of threads
==== Number of threads

The Apache Http Async Client starts by default one dispatcher thread, and a
number of worker threads used by the connection manager, as many as the number
Expand All @@ -55,7 +55,7 @@ RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.build();
--------------------------------------------------

=== Basic authentication
==== Basic authentication

Configuring basic authentication can be done by providing an
`HttpClientConfigCallback` while building the `RestClient` through its builder.
Expand Down Expand Up @@ -104,7 +104,7 @@ RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.build();
--------------------------------------------------

=== Encrypted communication
==== Encrypted communication

Encrypted communication can also be configured through the
`HttpClientConfigCallback`. The
Expand All @@ -130,7 +130,7 @@ RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.build();
--------------------------------------------------

=== Others
==== Others

For any other required configuration needed, the Apache HttpAsyncClient docs
should be consulted: https://hc.apache.org/httpcomponents-asyncclient-4.1.x/ .
27 changes: 27 additions & 0 deletions docs/java-rest/low-level/index.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[[java-rest-low]]
== Java Low Level REST Client

The low-level client's features include:

* minimal dependencies

* load balancing across all available nodes

* failover in case of node failures and upon specific response codes

* failed connection penalization (whether a failed node is retried depends on
how many consecutive times it failed; the more failed attempts the longer the
client will wait before trying that same node again)

* persistent connections

* trace logging of requests and responses

* optional automatic <<sniffer,discovery of cluster nodes>>


include::usage.asciidoc[]

include::configuration.asciidoc[]

include::sniffer.asciidoc[]
Loading