blob: 54a0d122e35439a25576a9f3d1d663f4e8e0b274 [file] [log] [blame]
/*
* 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.
*/
package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
import java.util.Collection;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* A Solr configuration holding all the possible customizable parameters that
* can be leveraged for an Oak search index.
*/
public interface OakSolrConfiguration {
/**
* Provide a field name to be used for indexing / searching a certain {@link org.apache.jackrabbit.oak.api.Type}
*
* @param propertyType the {@link org.apache.jackrabbit.oak.api.Type} to be indexed / searched
* @return the name of the Solr field to be used for the given {@link org.apache.jackrabbit.oak.api.Type}, or {@code null}
* if no specific field has been configured to handle the given {@code Type}.
*/
@Nullable
String getFieldNameFor(Type<?> propertyType);
/**
* Provide the field name for indexing / searching paths
*
* @return the name of the Solr field to be used for indexing and searching on paths (exact matching).
*/
@NotNull
String getPathField();
/**
* Provide a field name to search over for the given {@link org.apache.jackrabbit.oak.spi.query.Filter.PathRestriction}
*
* @param pathRestriction the {@link org.apache.jackrabbit.oak.spi.query.Filter.PathRestriction} used for filtering
* search results or {@code null} if no specific field has been configured for it.
* @return the name of the Solr field to be used for the given {@code PathRestriction}.
*/
@Nullable
String getFieldForPathRestriction(Filter.PathRestriction pathRestriction);
/**
* Provide a field name to search over for the given {@link org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction}
*
* @param propertyRestriction the {@link org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction} used for filtering search results
* @return the name of the Solr field to be used for the given {@code PropertyRestriction} or {@code null} if no specific field
* has been configured for it.
*/
@Nullable
String getFieldForPropertyRestriction(Filter.PropertyRestriction propertyRestriction);
/**
* Provide the commit policy to be used by a given {@link org.apache.solr.client.solrj.SolrClient}
*
* @return a {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration.CommitPolicy}
*/
@NotNull
CommitPolicy getCommitPolicy();
/**
* Provide a field name that is used as the default "catch all" field for searching over all the data
*
* @return the name of the Solr field to be used as "catch all" field, or {@code null} if no specific field
* has been configured for it.
*/
@Nullable
String getCatchAllField();
/**
* Provide the number of documents (rows) to be fetched for each Solr query
*
* @return the number of rows to fetch
*/
int getRows();
/**
* Define if the Solr index should be used to address property restrictions
*
* @return <code>true</code> if {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex} should be used
* for {@link org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction}s
*/
boolean useForPropertyRestrictions();
/**
* Define if the Solr index should be used to filter by primary types
*
* @return <code>true</code> if {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex} should be used
* for filtering by primary types
*/
boolean useForPrimaryTypes();
/**
* Define if the Solr index should be used to filter by path restrictions
*
* @return <code>true</code> if {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex} should be used
* for filtering by {@link org.apache.jackrabbit.oak.spi.query.Filter.PathRestriction}s
*/
boolean useForPathRestrictions();
/**
* Provide the names of the properties that should be neither indexed nor searched by the Solr index
*
* @return a {@link java.util.Collection} of property names for properties to be ignored
*/
@NotNull
Collection<String> getIgnoredProperties();
/**
* Provide the names of the properties that should be indexed and searched by the Solr index
*
* @return a {@link java.util.Collection} of property names for properties to be ignored
*/
@NotNull
Collection<String> getUsedProperties();
/**
* Make all nodes / documents matching a query that are descendants of a 'jcr:content' node collapse into such a
* node. That will result in resultsets being tipically much more compact in cases where most / all of the matching
* nodes match such a hierarchy.
*
* @return {@code true} if only the 'jcr:content' node should be returned for all its the matching descendants,
* {@code false} otherwise
*/
boolean collapseJcrContentNodes();
/**
* Make all nodes / documents matching a query having name equals to 'jcr:content' collapse into their respective
* parent.
* @return {@code true} if only the parent of 'jcr:content' nodes should be returned,
* {@code false} otherwise
*/
boolean collapseJcrContentParents();
/**
* Provide the name of the field to be used for indexing the collapsed path of each node when {@link #collapseJcrContentNodes()}
* is set to {@code true}.
*
* @return the name of the Solr field to be used for indexing and searching on collapsed paths.
*/
@NotNull
String getCollapsedPathField();
/**
* Provide the name of the field containing information about the depth of a certain path / node
*
* @return the name of the Solr field to be used for indexing and searching on path depth.
*/
String getPathDepthField();
/**
* Enum for describing Solr commit policy used in a certain instance
*/
enum CommitPolicy {
/**
* for default Solr commit
*/
HARD,
/**
* for Solr soft commit
*/
SOFT,
/**
* if no commits should be sent (relying on auto(soft)commit on the instance itself)
*/
AUTO
}
}