package org.apache.lucene.facet.index.params;
import java.io.Serializable;
import org.apache.lucene.facet.index.categorypolicy.OrdinalPolicy;
import org.apache.lucene.facet.index.categorypolicy.PathPolicy;
import org.apache.lucene.facet.taxonomy.CategoryPath;
/**
* 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.
*/
/**
* Parameters on how facets are to be written to the index.
* For example, which fields and terms are used to refer to the indexed posting list.
* <P>
* If non-default parameters were used during indexing, the same parameters
* must also be passed during faceted search. This requirement is analogous
* to the requirement during search to know which fields were indexed, and which
* Analyzer was used on the text.
*
* @lucene.experimental
*/
public interface FacetIndexingParams extends Serializable {
/**
* The name of the category-list to put this category in, or null if this
* category should not be aggregatable.
* <P>
* By default, all categories are written to the same category list, but
* applications which know in advance that in some situations only parts
* of the category hierarchy needs to be counted can divide the categories
* into two or more different category lists.
* <P>
* If null is returned for a category, it means that this category should
* not appear in any category list, and thus counts for it cannot be
* aggregated. This category can still be used for drill-down, even though
* the count for it is not known.
*/
public CategoryListParams getCategoryListParams(CategoryPath category);
/**
* Return info about all category lists in the index.
*
* @see #getCategoryListParams(CategoryPath)
*/
public Iterable<CategoryListParams> getAllCategoryListParams();
// TODO (Facet): Add special cases of exact/non-exact category term-text
/**
* Return the drilldown Term-Text which does not need to do any allocations.
* The number of chars set is returned.
* <p>
* Note: Make sure <code>buffer</code> is large enough.
* @see CategoryPath#charsNeededForFullPath()
*/
public int drillDownTermText(CategoryPath path, char[] buffer);
/**
* Get the partition size.
* Same value should be used during the life time of an index.
* At search time this value is compared with actual taxonomy size and their minimum is used.
*/
public int getPartitionSize();
/**
* Get the policy for indexing category <b>paths</b>,
* used for deciding how "high" to climb in taxonomy
* from a category when ingesting its category paths.
*/
public PathPolicy getPathPolicy();
/**
* Get the policy for indexing category <b>ordinals</b>,
* used for deciding how "high" to climb in taxonomy
* from a category when ingesting its ordinals
*/
public OrdinalPolicy getOrdinalPolicy();
/**
* Get the delimiter character used internally for drill-down terms
*/
public char getFacetDelimChar();
}