Package org.apache.lucene.analysis

# Class GraphTokenFilter

java.lang.Object
org.apache.lucene.util.AttributeSource
org.apache.lucene.analysis.TokenStream
org.apache.lucene.analysis.TokenFilter
org.apache.lucene.analysis.GraphTokenFilter

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `Unwrappable<TokenStream>`

public abstract class GraphTokenFilter extends TokenFilter
An abstract TokenFilter that exposes its input stream as a graph

Call `incrementBaseToken()` to move the root of the graph to the next position in the TokenStream, `incrementGraphToken()` to move along the current graph, and `incrementGraph()` to reset to the next graph based at the current root.

For example, given the stream 'a b/c:2 d e`, then with the base token at 'a', incrementGraphToken() will produce the stream 'a b d e', and then after calling incrementGraph() will produce the stream 'a c e'.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.lucene.util.AttributeSource

  `AttributeSource.State`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `MAX_GRAPH_STACK_SIZE`
  The maximum permitted number of routes through a graph
  `static final int`
  `MAX_TOKEN_CACHE_SIZE`
  The maximum permitted read-ahead in the token stream

  ### Fields inherited from class org.apache.lucene.analysis.TokenFilter

  `input`

  ### Fields inherited from class org.apache.lucene.analysis.TokenStream

  `DEFAULT_TOKEN_ATTRIBUTE_FACTORY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GraphTokenFilter(TokenStream input)`
  Create a new GraphTokenFilter

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `end()`
  This method is called by the consumer after the last token has been consumed, after `TokenStream.incrementToken()` returned `false` (using the new `TokenStream` API).
  `int`
  `getTrailingPositions()`
  Return the number of trailing positions at the end of the graph
  `protected final boolean`
  `incrementBaseToken()`
  Move the root of the graph to the next token in the wrapped TokenStream
  `protected final boolean`
  `incrementGraph()`
  Reset to the root token again, and move down the next route through the graph
  `protected final boolean`
  `incrementGraphToken()`
  Move to the next token in the current route through the graph
  `void`
  `reset()`
  This method is called by a consumer before it begins consumption using `TokenStream.incrementToken()`.

  ### Methods inherited from class org.apache.lucene.analysis.TokenFilter

  `close, unwrap`

  ### Methods inherited from class org.apache.lucene.analysis.TokenStream

  `incrementToken`

  ### Methods inherited from class org.apache.lucene.util.AttributeSource

  `addAttribute, addAttributeImpl, captureState, clearAttributes, cloneAttributes, copyTo, endAttributes, equals, getAttribute, getAttributeClassesIterator, getAttributeFactory, getAttributeImplsIterator, hasAttribute, hasAttributes, hashCode, reflectAsString, reflectWith, removeAllAttributes, restoreState, toString`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### MAX_GRAPH_STACK_SIZE

    public static final int MAX_GRAPH_STACK_SIZE
    The maximum permitted number of routes through a graph
    See Also:
      - Constant Field Values

  - ### MAX_TOKEN_CACHE_SIZE

    public static final int MAX_TOKEN_CACHE_SIZE
    The maximum permitted read-ahead in the token stream
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### GraphTokenFilter

    public GraphTokenFilter(TokenStream input)
    Create a new GraphTokenFilter

- ## Method Details

  - ### incrementBaseToken

    protected final boolean incrementBaseToken() throws IOException
    Move the root of the graph to the next token in the wrapped TokenStream
    Returns:
      `false` if the underlying stream is exhausted
    Throws:
      `IOException`

  - ### incrementGraphToken

    protected final boolean incrementGraphToken() throws IOException
    Move to the next token in the current route through the graph
    Returns:
      `false` if there are not more tokens in the current graph
    Throws:
      `IOException`

  - ### incrementGraph

    protected final boolean incrementGraph() throws IOException
    Reset to the root token again, and move down the next route through the graph
    Returns:
      false if there are no more routes through the graph
    Throws:
      `IOException`

  - ### getTrailingPositions

    public int getTrailingPositions()
    Return the number of trailing positions at the end of the graph

    NB this should only be called after `incrementGraphToken()` has returned `false`

  - ### end

    public void end() throws IOException
    Description copied from class: `TokenFilter`
    This method is called by the consumer after the last token has been consumed, after `TokenStream.incrementToken()` returned `false` (using the new `TokenStream` API). Streams implementing the old API should upgrade to use this feature.

    This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used.

    Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important.

    If you override this method, always call `super.end()`.

    NOTE: The default implementation chains the call to the input TokenStream, so be sure to call `super.end()` first when overriding this method.

    Overrides:
      `end` in class `TokenFilter`
    Throws:
      `IOException` - If an I/O error occurs

  - ### reset

    public void reset() throws IOException
    Description copied from class: `TokenFilter`
    This method is called by a consumer before it begins consumption using `TokenStream.incrementToken()`.

    Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh.

    If you override this method, always call `super.reset()`, otherwise some internal state will not be correctly reset (e.g., `Tokenizer` will throw `IllegalStateException` on further usage).

    NOTE: The default implementation chains the call to the input TokenStream, so be sure to call `super.reset()` when overriding this method.

    Overrides:
      `reset` in class `TokenFilter`
    Throws:
      `IOException`