blob: e0063854d42ef95e28d1109b62d8573e8312e9f3 [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.
*/
using System;
namespace Lucene.Net.Index
{
/// <summary> The TermVectorMapper can be used to map Term Vectors into your own
/// structure instead of the parallel array structure used by
/// <see cref="Lucene.Net.Index.IndexReader.GetTermFreqVector(int,String)" />.
/// <p/>
/// It is up to the implementation to make sure it is thread-safe.
///
///
///
/// </summary>
public abstract class TermVectorMapper
{
private bool ignoringPositions;
private bool ignoringOffsets;
protected internal TermVectorMapper()
{
}
/// <summary> </summary>
/// <param name="ignoringPositions">true if this mapper should tell Lucene to ignore positions even if they are stored
/// </param>
/// <param name="ignoringOffsets">similar to ignoringPositions
/// </param>
protected internal TermVectorMapper(bool ignoringPositions, bool ignoringOffsets)
{
this.ignoringPositions = ignoringPositions;
this.ignoringOffsets = ignoringOffsets;
}
/// <summary> Tell the mapper what to expect in regards to field, number of terms, offset and position storage.
/// This method will be called once before retrieving the vector for a field.
///
/// This method will be called before <see cref="Map(String,int,TermVectorOffsetInfo[],int[])" />.
/// </summary>
/// <param name="field">The field the vector is for
/// </param>
/// <param name="numTerms">The number of terms that need to be mapped
/// </param>
/// <param name="storeOffsets">true if the mapper should expect offset information
/// </param>
/// <param name="storePositions">true if the mapper should expect positions info
/// </param>
public abstract void SetExpectations(System.String field, int numTerms, bool storeOffsets, bool storePositions);
/// <summary> Map the Term Vector information into your own structure</summary>
/// <param name="term">The term to add to the vector
/// </param>
/// <param name="frequency">The frequency of the term in the document
/// </param>
/// <param name="offsets">null if the offset is not specified, otherwise the offset into the field of the term
/// </param>
/// <param name="positions">null if the position is not specified, otherwise the position in the field of the term
/// </param>
public abstract void Map(System.String term, int frequency, TermVectorOffsetInfo[] offsets, int[] positions);
/// <summary> Indicate to Lucene that even if there are positions stored, this mapper is not interested in them and they
/// can be skipped over. Derived classes should set this to true if they want to ignore positions. The default
/// is false, meaning positions will be loaded if they are stored.
/// </summary>
/// <value> false </value>
public virtual bool IsIgnoringPositions
{
get { return ignoringPositions; }
}
/// <summary> </summary>
/// <seealso cref="IsIgnoringPositions()"> Same principal as <see cref="IsIgnoringPositions()" />, but applied to offsets. false by default.
/// </seealso>
/// <value> false </value>
public virtual bool IsIgnoringOffsets
{
get { return ignoringOffsets; }
}
/// <summary> Passes down the index of the document whose term vector is currently being mapped,
/// once for each top level call to a term vector reader.
/// <p/>
/// Default implementation IGNORES the document number. Override if your implementation needs the document number.
/// <p/>
/// NOTE: Document numbers are internal to Lucene and subject to change depending on indexing operations.
///
/// </summary>
/// <param name="documentNumber">index of document currently being mapped
/// </param>
public virtual void SetDocumentNumber(int documentNumber)
{
}
}
}