///////////////////////////////////////////////////////////////
 * 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/qi4j/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>>.
