///////////////////////////////////////////////////////////////
 * 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-solr,Solr Index/Query]]
= Apache Solr Index/Query =

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

Index/Query services backed by an embedded http://lucene.apache.org/solr/[Apache Solr Search].

WARNING: Solr Index/Query service do not support the Zest™ Query API but only native Solr queries.

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

== Assembly ==

Assembly is done using the provided Assembler:

[snippet,java]
----
source=extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrQueryServiceTest.java
tag=assembly
----

== Configuration ==

Apache Solr Index/Query exclusively use the <<library-fileconfig>> to locate the directory where it persists its index.

You must provide `solrconfig.xml` and `schema.xml` files either from the classpath or in the configuration directory of
the <<library-fileconfig>>.
