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 int` | `MAX_GRAPH_STACK_SIZE` | The maximum permitted number of routes through a graph
    `static 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

    All Methods Instance Methods Concrete Methods
    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 boolean` | `incrementBaseToken()` | Move the root of the graph to the next token in the wrapped TokenStream
    `protected boolean` | `incrementGraph()` | Reset to the root token again, and move down the next route through the graph
    `protected 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 Detail

    - #### 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 Detail

    - #### GraphTokenFilter

          public GraphTokenFilter​(TokenStream input)

      Create a new GraphTokenFilter

  - ### Method Detail

    - #### 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`