Interface QueryStage<T extends QueryStageConfig>

Type Parameters:
T - query stage configuration class
All Known Implementing Classes:
QueryStageBase

public interface QueryStage<T extends QueryStageConfig>
Fusion query pipeline stage. Custom query stages must implement this interface to be discovered and called by Fusion. Example of custom query stage class:
 @Stage(type = "myStage", configClass = MyStageConfig.class)
 public class MyStage implements QueryStage<MyStageConfig> {

   @Override
   public void init(MyStageConfig config, Fusion fusion) {
     // stage initialization logic
   }

   @Override
   public Document process(Document document, Context context) {
     // document processing logic
   }
 
Implementations of this class must be stateless. Fusion can create and use multiple query stage instances at the same time.
  • Method Details

    • init

      void init(T config, Fusion fusion)
      Stage initialization callback. This method will be called by Fusion when query stage instance is created and before 'process' method is called. Stage configuration will be passed by Fusion as QueryStageConfig instance. Additionally Fusion interface instance will be passed to allow calling Fusion API from the query stage.
      Parameters:
      config - query pipeline stage configuration
      fusion - Fusion API instance
    • process

      default DslQueryRequestResponse process(DslQueryRequestResponse dslQueryRequestResponse, Context context)
      Process a single dslQueryRequestResponse. This method is called for each dslQueryRequestResponse passing through a query pipeline. Implement this method to perform processing of a single DslQueryRequestResponse instance that results in either 1 or 0 dslQueryRequestResponses being emitted. Return null to drop query from the pipeline. Note that this method implementation must be thread-safe as it can be invoked concurrently by multiple threads.
      Parameters:
      dslQueryRequestResponse - dslQueryRequestResponse going through query pipeline
      context - query pipeline context
      Returns:
      processed query or null to drop query from the pipeline
    • process

      default void process(DslQueryRequestResponse dslQueryRequestResponse, Context context, Consumer<DslQueryRequestResponse> output)
      Process single dslQueryRequestResponse. This method is called for each dslQueryRequestResponse passing through a query pipeline. Implement this method to perform processing of single DslQueryRequestResponse instance that results in an arbitrary number of dslQueryRequestResponses being emitted. Call output.accept(dslQueryRequestResponse) for each dslQueryRequestResponse you want to emit as a result of processing. Note that after sending a dslQueryRequestResponse instance to the output, its state may be changed by subsequent stages, therefore it is strongly advised to discard the dslQueryRequestResponse instance immediately after emitting it. Passing null to output consumer will cause IllegalArgumentException. Overriding the default implementation of this method will result in process(DslQueryRequestResponse, Context) to not be called. Default implementation is to call process(DslQueryRequestResponse, Context) method. Note that this method implementation must be thread-safe as it can be invoked concurrently by multiple threads.
      Parameters:
      dslQueryRequestResponse - dslQueryRequestResponse going through query pipeline
      context - query pipeline context
      output - consumer for queryRequestResponses emitted as the result of processing
    • process

      default QueryRequestResponse process(QueryRequestResponse queryRequestResponse, Context context)
      Process a single queryRequestResponse. This method is called for each queryRequestResponse passing through a query pipeline. Implement this method to perform processing of a single QueryRequestResponse instance that results in either 1 or 0 queryRequestResponses being emitted. Return null to drop query from the pipeline. Note that this method implementation must be thread-safe as it can be invoked concurrently by multiple threads.
      Parameters:
      queryRequestResponse - queryRequestResponse going through query pipeline
      context - query pipeline context
      Returns:
      processed query or null to drop query from the pipeline
    • process

      default void process(QueryRequestResponse queryRequestResponse, Context context, Consumer<QueryRequestResponse> output)
      Process single queryRequestResponse. This method is called for each queryRequestResponse passing through index pipeline. Implement this method to perform processing of single QueryRequestResponse instance that results in arbitrary number of queryRequestResponses being emitted. Call output.accept(queryRequestResponse) for each queryRequestResponse you want to emit as a result of processing. Note that after sending a queryRequestResponse instance to the output, its state may be changed by subsequent stages, therefore it is strongly advised to discard the queryRequestResponse instance immediately after emitting it. Passing null to output consumer will cause IllegalArgumentException. Overriding the default implementation of this method will result in process(QueryRequestResponse, Context) to not be called. Default implementation is to call process(QueryRequestResponse, Context) method. Note that this method implementation must be thread-safe as it can be invoked concurrently by multiple threads.
      Parameters:
      queryRequestResponse - queryRequestResponse going through query pipeline
      context - query pipeline context
      output - consumer for queryRequestResponses emitted as the result of processing