2013-08-28 19:24:34 -04:00
|
|
|
[[java-api]]
|
|
|
|
= Java API
|
2017-02-04 05:16:19 -05:00
|
|
|
|
|
|
|
include::../Versions.asciidoc[]
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
[preface]
|
|
|
|
== Preface
|
2017-11-29 03:44:25 -05:00
|
|
|
This section describes the Java API that Elasticsearch provides. All
|
|
|
|
Elasticsearch operations are executed using a
|
2013-08-28 19:24:34 -04:00
|
|
|
<<client,Client>> object. All
|
|
|
|
operations are completely asynchronous in nature (either accepts a
|
2014-05-12 22:07:46 -04:00
|
|
|
listener, or returns a future).
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
Additionally, operations on a client may be accumulated and executed in
|
2015-06-24 17:27:19 -04:00
|
|
|
<<java-docs-bulk,Bulk>>.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
Note, all the APIs are exposed through the
|
|
|
|
Java API (actually, the Java API is used internally to execute them).
|
|
|
|
|
2017-08-01 04:38:56 -04:00
|
|
|
WARNING: Starting from version 5.6.0, a new Java client has been
|
|
|
|
released: the {java-rest}/java-rest-high.html[Java High Level REST Client].
|
|
|
|
This new client is designed to replace the `TransportClient` in Java
|
|
|
|
applications which will be deprecated in future versions of Elasticsearch.
|
|
|
|
|
2017-07-31 09:41:21 -04:00
|
|
|
== Javadoc
|
|
|
|
|
|
|
|
The javadoc for the transport client can be found at {transport-client-javadoc}/index.html.
|
2013-09-03 10:15:07 -04:00
|
|
|
|
2013-08-28 19:24:34 -04:00
|
|
|
== Maven Repository
|
|
|
|
|
|
|
|
Elasticsearch is hosted on
|
|
|
|
http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22elasticsearch%22[Maven
|
|
|
|
Central].
|
|
|
|
|
|
|
|
For example, you can define the latest version in your `pom.xml` file:
|
|
|
|
|
2016-07-29 09:59:15 -04:00
|
|
|
["source","xml",subs="attributes"]
|
2013-08-28 19:24:34 -04:00
|
|
|
--------------------------------------------------
|
|
|
|
<dependency>
|
2016-07-29 09:24:58 -04:00
|
|
|
<groupId>org.elasticsearch.client</groupId>
|
|
|
|
<artifactId>transport</artifactId>
|
2016-07-29 09:59:15 -04:00
|
|
|
<version>{version}</version>
|
2013-08-28 19:24:34 -04:00
|
|
|
</dependency>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
Document how to import Lucene Snapshot libs when elasticsearch clients (#26113)
When using the High Level Rest Client 6.0.0-beta1, we are missing some transitive dependencies for Lucene as Lucene 7 has not been released yet. See the following `pom.xml`:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.0.0-beta1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.0.0-beta1</version>
</dependency>
```
It gives:
```
[ERROR] Failed to execute goal on project fscrawler: Could not resolve dependencies for project fr.pilato.elasticsearch.crawler:fscrawler:jar:2.4-SNAPSHOT: The following artifacts could not be resolved: org.apache.lucene:lucene-analyzers-common:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-backward-codecs:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-grouping:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-highlighter:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-join:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-memory:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-misc:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-queries:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-queryparser:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-sandbox:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial-extras:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial3d:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-suggest:jar:7.0.0-snapshot-00142c9: Failure to find org.apache.lucene:lucene-analyzers-common:jar:7.0.0-snapshot-00142c9 in https://artifacts.elastic.co/maven/ was cached in the local repository, resolution will not be reattempted until the update interval of elastic-download-service has elapsed or updates are forced -
```
We need to add some temporary documentation on how to add the missing repository to a gradle or maven project:
```xml
<repository>
<id>elastic-lucene-snapshots</id>
<name>Elastic Lucene Snapshots</name>
<url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
```
This also applies to the transport client.
Closes #26106.
2017-08-10 08:54:07 -04:00
|
|
|
[[java-transport-usage-maven-lucene]]
|
2017-08-10 11:19:01 -04:00
|
|
|
=== Lucene Snapshot repository
|
Document how to import Lucene Snapshot libs when elasticsearch clients (#26113)
When using the High Level Rest Client 6.0.0-beta1, we are missing some transitive dependencies for Lucene as Lucene 7 has not been released yet. See the following `pom.xml`:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.0.0-beta1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.0.0-beta1</version>
</dependency>
```
It gives:
```
[ERROR] Failed to execute goal on project fscrawler: Could not resolve dependencies for project fr.pilato.elasticsearch.crawler:fscrawler:jar:2.4-SNAPSHOT: The following artifacts could not be resolved: org.apache.lucene:lucene-analyzers-common:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-backward-codecs:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-grouping:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-highlighter:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-join:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-memory:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-misc:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-queries:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-queryparser:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-sandbox:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial-extras:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-spatial3d:jar:7.0.0-snapshot-00142c9, org.apache.lucene:lucene-suggest:jar:7.0.0-snapshot-00142c9: Failure to find org.apache.lucene:lucene-analyzers-common:jar:7.0.0-snapshot-00142c9 in https://artifacts.elastic.co/maven/ was cached in the local repository, resolution will not be reattempted until the update interval of elastic-download-service has elapsed or updates are forced -
```
We need to add some temporary documentation on how to add the missing repository to a gradle or maven project:
```xml
<repository>
<id>elastic-lucene-snapshots</id>
<name>Elastic Lucene Snapshots</name>
<url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
```
This also applies to the transport client.
Closes #26106.
2017-08-10 08:54:07 -04:00
|
|
|
|
|
|
|
The very first releases of any major version (like a beta), might have been built on top of a Lucene Snapshot version.
|
|
|
|
In such a case you will be unable to resolve the Lucene dependencies of the client.
|
|
|
|
|
|
|
|
For example, if you want to use the `6.0.0-beta1` version which depends on Lucene `7.0.0-snapshot-00142c9`, you must
|
|
|
|
define the following repository.
|
|
|
|
|
|
|
|
For Maven:
|
|
|
|
|
|
|
|
["source","xml",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
<repository>
|
|
|
|
<id>elastic-lucene-snapshots</id>
|
|
|
|
<name>Elastic Lucene Snapshots</name>
|
|
|
|
<url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9</url>
|
|
|
|
<releases><enabled>true</enabled></releases>
|
|
|
|
<snapshots><enabled>false</enabled></snapshots>
|
|
|
|
</repository>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
For Gradle:
|
|
|
|
|
|
|
|
["source","groovy",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
maven {
|
|
|
|
url 'http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9'
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
|
|
|
|
2016-11-10 14:34:03 -05:00
|
|
|
=== Log4j 2 Logger
|
|
|
|
|
|
|
|
You need to also include Log4j 2 dependencies:
|
|
|
|
|
|
|
|
["source","xml",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
<dependency>
|
|
|
|
<groupId>org.apache.logging.log4j</groupId>
|
|
|
|
<artifactId>log4j-core</artifactId>
|
2017-09-22 11:57:06 -04:00
|
|
|
<version>2.9.1</version>
|
2016-11-10 14:34:03 -05:00
|
|
|
</dependency>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
And also provide a Log4j 2 configuration file in your classpath.
|
|
|
|
For example, you can add in your `src/main/resources` project dir a `log4j2.properties` file like:
|
|
|
|
|
|
|
|
|
|
|
|
["source","properties",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
appender.console.type = Console
|
|
|
|
appender.console.name = console
|
|
|
|
appender.console.layout.type = PatternLayout
|
|
|
|
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%m%n
|
|
|
|
|
|
|
|
rootLogger.level = info
|
|
|
|
rootLogger.appenderRef.console.ref = console
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
=== Using another Logger
|
|
|
|
|
|
|
|
If you want to use another logger than Log4j 2, you can use http://www.slf4j.org/[SLF4J] bridge to do that:
|
|
|
|
|
|
|
|
["source","xml",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
<dependency>
|
|
|
|
<groupId>org.apache.logging.log4j</groupId>
|
|
|
|
<artifactId>log4j-to-slf4j</artifactId>
|
2017-09-22 11:57:06 -04:00
|
|
|
<version>2.9.1</version>
|
2016-11-10 14:34:03 -05:00
|
|
|
</dependency>
|
|
|
|
<dependency>
|
|
|
|
<groupId>org.slf4j</groupId>
|
|
|
|
<artifactId>slf4j-api</artifactId>
|
2017-04-09 07:19:16 -04:00
|
|
|
<version>1.7.24</version>
|
2016-11-10 14:34:03 -05:00
|
|
|
</dependency>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
http://www.slf4j.org/manual.html[This page] lists implementations you can use. Pick your favorite logger
|
|
|
|
and add it as a dependency. As an example, we will use the `slf4j-simple` logger:
|
|
|
|
|
|
|
|
["source","xml",subs="attributes"]
|
|
|
|
--------------------------------------------------
|
|
|
|
<dependency>
|
|
|
|
<groupId>org.slf4j</groupId>
|
|
|
|
<artifactId>slf4j-simple</artifactId>
|
|
|
|
<version>1.7.21</version>
|
|
|
|
</dependency>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
|
2015-11-30 05:47:17 -05:00
|
|
|
== Dealing with JAR dependency conflicts
|
|
|
|
|
|
|
|
If you want to use Elasticsearch in your Java application, you may have to deal with version conflicts with third party
|
|
|
|
dependencies like Guava and Joda. For instance, perhaps Elasticsearch uses Joda 2.8, while your code uses Joda 2.1.
|
|
|
|
|
|
|
|
You have two choices:
|
|
|
|
|
|
|
|
* The simplest solution is to upgrade. Newer module versions are likely to have fixed old bugs.
|
|
|
|
The further behind you fall, the harder it will be to upgrade later. Of course, it is possible that you are using a
|
|
|
|
third party dependency that in turn depends on an outdated version of a package, which prevents you from upgrading.
|
|
|
|
|
|
|
|
* The second option is to relocate the troublesome dependencies and to shade them either with your own application
|
|
|
|
or with Elasticsearch and any plugins needed by the Elasticsearch client.
|
|
|
|
|
2015-12-01 17:03:28 -05:00
|
|
|
The https://www.elastic.co/blog/to-shade-or-not-to-shade["To shade or not to shade" blog post] describes
|
2015-11-30 05:47:17 -05:00
|
|
|
all the steps for doing so.
|
|
|
|
|
|
|
|
== Embedding jar with dependencies
|
|
|
|
|
|
|
|
If you want to create a single jar containing your application and all dependencies, you should not
|
|
|
|
use `maven-assembly-plugin` for that because it can not deal with `META-INF/services` structure which is
|
|
|
|
required by Lucene jars.
|
|
|
|
|
|
|
|
Instead, you can use `maven-shade-plugin` and configure it as follow:
|
|
|
|
|
|
|
|
[source,xml]
|
|
|
|
--------------------------------------------------
|
|
|
|
<plugin>
|
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
|
<artifactId>maven-shade-plugin</artifactId>
|
|
|
|
<version>2.4.1</version>
|
|
|
|
<executions>
|
|
|
|
<execution>
|
|
|
|
<phase>package</phase>
|
|
|
|
<goals><goal>shade</goal></goals>
|
|
|
|
<configuration>
|
|
|
|
<transformers>
|
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
|
|
|
</transformers>
|
|
|
|
</configuration>
|
|
|
|
</execution>
|
|
|
|
</executions>
|
|
|
|
</plugin>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
Note that if you have a `main` class you want to automatically call when running `java -jar yourjar.jar`, just add
|
|
|
|
it to the `transformers`:
|
|
|
|
|
|
|
|
[source,xml]
|
|
|
|
--------------------------------------------------
|
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
|
|
<mainClass>org.elasticsearch.demo.Generate</mainClass>
|
|
|
|
</transformer>
|
|
|
|
--------------------------------------------------
|
|
|
|
|
2013-08-28 19:24:34 -04:00
|
|
|
include::client.asciidoc[]
|
|
|
|
|
2015-06-24 17:27:19 -04:00
|
|
|
include::docs.asciidoc[]
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
include::search.asciidoc[]
|
|
|
|
|
2014-05-15 06:36:05 -04:00
|
|
|
include::aggs.asciidoc[]
|
|
|
|
|
2015-06-24 17:27:19 -04:00
|
|
|
include::query-dsl.asciidoc[]
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-06-24 17:27:19 -04:00
|
|
|
include::indexed-scripts.asciidoc[]
|
2015-12-30 11:50:46 -05:00
|
|
|
|
|
|
|
include::admin/index.asciidoc[]
|