All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.lucene.facet.enhancements.CategoryEnhancement Maven / Gradle / Ivy

There is a newer version: 9.11.1
Show newest version
package org.apache.lucene.facet.enhancements;

import org.apache.lucene.analysis.TokenStream;

import org.apache.lucene.facet.enhancements.params.EnhancementsIndexingParams;
import org.apache.lucene.facet.index.attributes.CategoryAttribute;
import org.apache.lucene.facet.index.attributes.CategoryProperty;
import org.apache.lucene.facet.index.streaming.CategoryListTokenizer;
import org.apache.lucene.facet.index.streaming.CategoryParentsStream;
import org.apache.lucene.facet.taxonomy.TaxonomyWriter;

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

/**
 * This interface allows easy addition of enhanced category features. Usually, a
 * {@link CategoryEnhancement} will correspond to a {@link CategoryProperty}.
 * 

* A category enhancement can contribute to the index in two possible ways: *

    *
  1. To each category with data relevant to the enhancement, add this data to * the category's token payload, through * {@link #getCategoryTokenBytes(CategoryAttribute)}. This data will be read * during search using {@link #extractCategoryTokenData(byte[], int, int)}.
  2. *
  3. To each document which contains categories with data relevant to the * enhancement, add a {@link CategoryListTokenizer} through * {@link #getCategoryListTokenizer(TokenStream, EnhancementsIndexingParams, TaxonomyWriter)} * . The {@link CategoryListTokenizer} should add a single token which includes * all the enhancement relevant data from the categories. The category list * token's text is defined by {@link #getCategoryListTermText()}.
  4. *
* * @lucene.experimental */ public interface CategoryEnhancement { /** * Get the bytes to be added to the category token payload for this * enhancement. *

* NOTE: The returned array is copied, it is recommended to allocate * a new one each time. *

* The bytes generated by this method are the input of * {@link #extractCategoryTokenData(byte[], int, int)}. * * @param categoryAttribute * The attribute of the category. * @return The bytes to be added to the category token payload for this * enhancement. */ byte[] getCategoryTokenBytes(CategoryAttribute categoryAttribute); /** * Get the data of this enhancement from a category token payload. *

* The input bytes for this method are generated in * {@link #getCategoryTokenBytes(CategoryAttribute)}. * * @param buffer * The payload buffer. * @param offset * The offset of this enhancement's data in the buffer. * @param length * The length of this enhancement's data (bytes). * @return An Object containing the data. */ Object extractCategoryTokenData(byte[] buffer, int offset, int length); /** * Declarative method to indicate whether this enhancement generates * separate category list. * * @return {@code true} if generates category list, else {@code false}. */ boolean generatesCategoryList(); /** * Returns the text of this enhancement's category list term. * * @return The text of this enhancement's category list term. */ String getCategoryListTermText(); /** * Get the {@link CategoryListTokenizer} which generates the category list * for this enhancement. If {@link #generatesCategoryList()} returns * {@code false} this method will not be called. * * @param tokenizer * The input stream containing categories. * @param indexingParams * The indexing params to use. * @param taxonomyWriter * The taxonomy to add categories and get their ordinals. * @return A {@link CategoryListTokenizer} generating the category list for * this enhancement, with {@code tokenizer} as it's input. */ CategoryListTokenizer getCategoryListTokenizer(TokenStream tokenizer, EnhancementsIndexingParams indexingParams, TaxonomyWriter taxonomyWriter); /** * Get a {@link CategoryProperty} class to be retained when creating * {@link CategoryParentsStream}. * * @return the {@link CategoryProperty} class to be retained when creating * {@link CategoryParentsStream}, or {@code null} if there is no * such property. */ Class getRetainableProperty(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy