///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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.
///////////////////////////////////////////////////////////////

[[extension-index-elasticsearch,ElasticSearch Index/Query]]
= ElasticSearch Index/Query =


[devstatus]
--------------
source=extensions/indexing-elasticsearch/dev-status.xml
--------------


Index/Query services backed by http://www.elasticsearch.org/[ElasticSearch] search engine built on top of
http://lucene.apache.org/[Apache Lucene].

WARNING: ElasticSearch Index/Query do not support ComplexQueries from the Query API, ie. queries by "example value".

Three modes of operation are supported:

- in-memory ;
- on-filesystem ;
- clustered.

include::../../build/docs/buildinfo/artifact.txt[]

== Embedded: in Memory or on FileSystem ==

Both in-memory and on-filesystem assemblies share the same configuration properties, see below.

=== In Memory Assembly ===

In-memory ElasticSearch Index/Query service relies on the <<library-fileconfig>> to decide where it stores its
transaction logs as there's no in-memory transaction log implementation in ElasticSearch.

Assembly is done using the provided Assembler:

[snippet,java]
----
source=extensions/indexing-elasticsearch/src/test/java/org/apache/zest/index/elasticsearch/DocumentationSupport.java
tag=memory
----


=== On FileSystem Assembly ===

Filesystem based ElasticSearch Index/Query service relies on the <<library-fileconfig>> to decide where it stores its
index data, transaction logs etc...

Assembly is done using the provided Assembler:

[snippet,java]
----
source=extensions/indexing-elasticsearch/src/test/java/org/apache/zest/index/elasticsearch/DocumentationSupport.java
tag=filesystem
----

=== Configuration ===

IMPORTANT: By default queries can only traverse Aggregated Associations, if you want to be able to traverse all
Associations set the `indexNonAggregatedAssociations` configuration property to `TRUE`.

Here are the configuration properties for both the in-memory and on-filesystem ElasticSearch Index/Query services:

[snippet,java]
----
source=extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchConfiguration.java
tag=config
----

All configuration properties are defaulted meaning that you can use ElasticSearch Index/Query service without
configuration.

== In an ElasticSearch cluster ==

=== Assembly ===

Assembly is done using the provided Assembler:

[snippet,java]
----
source=extensions/indexing-elasticsearch/src/test/java/org/apache/zest/index/elasticsearch/DocumentationSupport.java
tag=cluster
----


=== Configuration ===

Here are the configuration properties for the clustered ElasticSearch Index/Query service. Note that it inherits the
properties defined in the in-memory or on-filesystem configuration, see above.

[snippet,java]
----
source=extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchClusterConfiguration.java
tag=config
----

Again, all configuration properties are defaulted meaning that you can use ElasticSearch Index/Query service without
configuration.
