Class InMemorySearchStore

java.lang.Object
io.fluxzero.sdk.persisting.search.client.InMemorySearchStore
All Implemented Interfaces:
SearchClient, AutoCloseable

public class InMemorySearchStore extends Object implements SearchClient
In-memory implementation of the SearchClient, intended for local testing and development.

Stores all indexed documents in memory, with support for basic search, statistics, and deletion logic. Ideal for use in test scenarios where a real Fluxzero Runtime connection is not available or needed.

  • Field Details

    • identifier

      protected static final Function<io.fluxzero.common.api.search.SerializedDocument, String> identifier
  • Constructor Details

  • Method Details

    • asIdentifier

      protected static String asIdentifier(String collection, String documentId)
    • getSearchCollections

      public List<io.fluxzero.common.api.search.SearchCollection> getSearchCollections()
      Description copied from interface: SearchClient
      Retrieves existing regular search collections and audit trails.

      Implementations predating this operation may throw UnsupportedOperationException.

      Specified by:
      getSearchCollections in interface SearchClient
      Returns:
      the available collections with their storage types, in deterministic order
    • index

      public CompletableFuture<Void> index(List<io.fluxzero.common.api.search.SerializedDocument> documents, io.fluxzero.common.Guarantee guarantee, boolean ifNotExists)
      Description copied from interface: SearchClient
      Indexes a list of serialized documents into the search engine.
      Specified by:
      index in interface SearchClient
      Parameters:
      documents - the documents to index
      guarantee - delivery guarantee (see Guarantee)
      ifNotExists - if true, only index documents that do not already exist
      Returns:
      a future that completes when the operation is done
    • search

      public Stream<SearchHit<io.fluxzero.common.api.search.SerializedDocument>> search(io.fluxzero.common.api.search.SearchDocuments searchDocuments, int fetchSize)
      Description copied from interface: SearchClient
      Executes a streaming search query using the given criteria and fetch size.
      Specified by:
      search in interface SearchClient
      Parameters:
      searchDocuments - the search parameters and query
      fetchSize - the number of results to fetch per page
      Returns:
      a stream of search hits matching the query
    • searchModels

      public Stream<SearchHit<io.fluxzero.common.api.search.SerializedDocument>> searchModels(io.fluxzero.common.api.search.SearchModelDocuments request, int fetchSize)
      Description copied from interface: SearchClient
      Executes a bounded current-state search across independent model relationships.
      Specified by:
      searchModels in interface SearchClient
    • searchModelGraph

      public Stream<SearchHit<io.fluxzero.common.api.search.SerializedDocument>> searchModelGraph(io.fluxzero.common.api.search.SearchModelGraphDocuments request, int fetchSize)
      Description copied from interface: SearchClient
      Executes a current-state model search and composes each matching root's explicitly placed child graph.
      Specified by:
      searchModelGraph in interface SearchClient
    • documentExists

      public boolean documentExists(io.fluxzero.common.api.search.HasDocument r)
      Description copied from interface: SearchClient
      Checks whether a document with the given criteria exists.
      Specified by:
      documentExists in interface SearchClient
      Parameters:
      r - an object describing the document (e.g., id and collection)
      Returns:
      true if the document exists, false otherwise
    • fetch

      public Optional<io.fluxzero.common.api.search.SerializedDocument> fetch(io.fluxzero.common.api.search.GetDocument r)
      Description copied from interface: SearchClient
      Fetches a single serialized document matching the given request.
      Specified by:
      fetch in interface SearchClient
      Parameters:
      r - an object describing the document to retrieve
      Returns:
      an optional containing the document, if found
    • fetchModelDocument

      public io.fluxzero.common.api.search.GetDocumentResult fetchModelDocument(io.fluxzero.common.api.search.GetDocument request)
      Description copied from interface: SearchClient
      Fetches a direct Model document together with the durable head written by the same materialization transaction.
      Specified by:
      fetchModelDocument in interface SearchClient
    • getModelMigration

      public io.fluxzero.common.api.search.GetModelMigrationResult getModelMigration(io.fluxzero.common.api.search.GetModelMigration request)
      Description copied from interface: SearchClient
      Retrieves the production and staged direct documents used to verify one Model migration.
      Specified by:
      getModelMigration in interface SearchClient
    • getModelMigrations

      public io.fluxzero.common.api.search.GetModelMigrationsResult getModelMigrations(io.fluxzero.common.api.search.GetModelMigrations request)
      Description copied from interface: SearchClient
      Retrieves a bounded batch of staged direct Model migrations.
      Specified by:
      getModelMigrations in interface SearchClient
    • adoptModelMigration

      public CompletableFuture<Void> adoptModelMigration(io.fluxzero.common.api.search.AdoptModelMigration request)
      Description copied from interface: SearchClient
      Atomically adopts a previously inspected and application-verified staged Model document while retaining the accepted normalized source until an ordinary Model write ends legacy-write coexistence.
      Specified by:
      adoptModelMigration in interface SearchClient
    • fetch

      public Collection<io.fluxzero.common.api.search.SerializedDocument> fetch(io.fluxzero.common.api.search.GetDocuments request)
      Description copied from interface: SearchClient
      Fetches a collection of serialized documents that match the given request.
      Specified by:
      fetch in interface SearchClient
      Parameters:
      request - an object describing the documents to retrieve
      Returns:
      a collection of retrieved documents matching
    • delete

      public CompletableFuture<Void> delete(io.fluxzero.common.api.search.SearchQuery query, io.fluxzero.common.Guarantee guarantee, int batchSize)
      Description copied from interface: SearchClient
      Deletes documents matching a given query using the requested batch size.

      A value of 0 uses the runtime default, a positive value requests that batch size, and a negative value requests a single unbounded statement.

      Specified by:
      delete in interface SearchClient
      Parameters:
      query - the search query specifying which documents to delete
      guarantee - delivery guarantee
      batchSize - requested delete batch size
      Returns:
      a future that completes when the deletion has been performed
    • move

      public CompletableFuture<Void> move(io.fluxzero.common.api.search.SearchQuery query, String targetCollection, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Moves documents matching a given query to the given target collection.
      Specified by:
      move in interface SearchClient
      Parameters:
      query - the search query specifying which documents to move
      targetCollection - the name of the collection to move documents to
      guarantee - delivery guarantee
      Returns:
      a future that completes when the move has been performed
    • delete

      public CompletableFuture<Void> delete(String documentId, String collection, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Deletes a document by its unique id and collection name.
      Specified by:
      delete in interface SearchClient
      Parameters:
      documentId - the document id
      collection - the collection to delete from
      guarantee - delivery guarantee
      Returns:
      a future that completes when the deletion has been performed
    • rewriteModelGraphDocument

      public CompletableFuture<Void> rewriteModelGraphDocument(io.fluxzero.common.api.search.SerializedDocument replacement, String expectedManifest, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Conditionally replaces one materialized model-graph document while its manifest still matches the handled version. Implementations without durable model-graph projections may retain the unsupported default.
      Specified by:
      rewriteModelGraphDocument in interface SearchClient
    • move

      public CompletableFuture<Void> move(String documentId, String collection, String targetCollection, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Moves a document to another collection.
      Specified by:
      move in interface SearchClient
      Parameters:
      documentId - the document id
      collection - the collection to move from
      targetCollection - the collection to move to
      guarantee - delivery guarantee
      Returns:
      a future that completes when the move has been performed
    • createAuditTrail

      public CompletableFuture<Void> createAuditTrail(io.fluxzero.common.api.search.CreateAuditTrail request)
      Description copied from interface: SearchClient
      Configures Fluxzero to use a search collection as a searchable audit trail.
      Specified by:
      createAuditTrail in interface SearchClient
      Parameters:
      request - a request object specifying the collection to use as an audit trail and retention configuration
      Returns:
      a future that completes when the audit trail has been created.
    • deleteCollection

      public CompletableFuture<Void> deleteCollection(String collection, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Deletes an entire document collection and all its contents.
      Specified by:
      deleteCollection in interface SearchClient
      Parameters:
      collection - the name of the collection to delete
      guarantee - delivery guarantee
      Returns:
      a future that completes when the collection has been deleted
    • fetchStatistics

      public List<io.fluxzero.common.api.search.DocumentStats> fetchStatistics(io.fluxzero.common.api.search.SearchQuery query, List<String> fields, List<String> groupBy)
      Description copied from interface: SearchClient
      Retrieves search statistics (counts, averages, etc.) over matching documents.
      Specified by:
      fetchStatistics in interface SearchClient
      Parameters:
      query - the query to filter documents
      fields - the fields to compute statistics for
      groupBy - field names used to group statistics
      Returns:
      a list of DocumentStats
    • fetchHistogram

      public io.fluxzero.common.api.search.SearchHistogram fetchHistogram(io.fluxzero.common.api.search.GetSearchHistogram request)
      Description copied from interface: SearchClient
      Fetches a histogram (bucketed time-series view) for documents matching the query.
      Specified by:
      fetchHistogram in interface SearchClient
      Parameters:
      request - the histogram query parameters
      Returns:
      a SearchHistogram representing the result
    • fetchFacetStats

      public List<io.fluxzero.common.api.search.FacetStats> fetchFacetStats(io.fluxzero.common.api.search.SearchQuery query)
      Description copied from interface: SearchClient
      Retrieves facet statistics (i.e., value counts) for a given query.
      Specified by:
      fetchFacetStats in interface SearchClient
      Parameters:
      query - the query to match documents against
      Returns:
      a list of facet statistics
    • bulkUpdate

      public CompletableFuture<Void> bulkUpdate(Collection<io.fluxzero.common.api.search.DocumentUpdate> updates, io.fluxzero.common.Guarantee guarantee)
      Description copied from interface: SearchClient
      Performs a batch update on a set of documents.
      Specified by:
      bulkUpdate in interface SearchClient
      Parameters:
      updates - the update operations to perform
      guarantee - delivery guarantee
      Returns:
      a future that completes when the updates have been applied
    • materializeModelCommit

      public void materializeModelCommit(io.fluxzero.common.api.modeling.CommitModels commit, List<io.fluxzero.common.api.modeling.ModelUpdate> assignedUpdates, Set<String> excludedModelIds)
    • prepareModelCommit

      public Runnable prepareModelCommit(io.fluxzero.common.api.modeling.CommitModels commit, List<io.fluxzero.common.api.modeling.ModelUpdate> assignedUpdates, Set<String> excludedModelIds)
      Materializes direct Model documents and returns their deferred local-monitor publication.
      Returns:
      publication to invoke after the owning commit fence has advanced
    • materializeModelGraphProjection

      public void materializeModelGraphProjection(io.fluxzero.common.api.modeling.ModelGraphProjectionConfiguration configuration, Set<String> rootIds, long stateIndex, boolean rebuild)
      Synchronously materializes affected roots for the SDK-only graph-projection worker.
    • prepareModelGraphProjection

      public Runnable prepareModelGraphProjection(io.fluxzero.common.api.modeling.ModelGraphProjectionConfiguration configuration, Set<String> rootIds, long stateIndex, boolean rebuild)
      Materializes graph documents and returns their deferred local-monitor publication.
      Returns:
      publication to invoke after the graph-projection fence has advanced
    • openStream

      public Stream<io.fluxzero.common.api.SerializedMessage> openStream(String collection, Long lastIndex, int maxSize)
    • openStream

      public Stream<io.fluxzero.common.api.SerializedMessage> openStream(String collection, Long lastIndex, int maxSize, boolean includeDocumentTombstones)
    • truncateCollection

      public void truncateCollection(String collection)
    • storeMessages

      protected void storeMessages(Map<String, io.fluxzero.common.api.search.SerializedDocument> updates)
    • asSerializedMessage

      protected io.fluxzero.common.api.SerializedMessage asSerializedMessage(io.fluxzero.common.api.search.SerializedDocument document)
    • purgeExpiredMessages

      protected void purgeExpiredMessages(Duration messageExpiration)
    • notifyMonitors

      protected void notifyMonitors(String collection, List<io.fluxzero.common.api.SerializedMessage> messages)
    • registerMonitor

      public io.fluxzero.common.Registration registerMonitor(BiConsumer<String, List<io.fluxzero.common.api.SerializedMessage>> monitor)
    • registerMonitor

      public io.fluxzero.common.Registration registerMonitor(String collection, Consumer<List<io.fluxzero.common.api.SerializedMessage>> monitor)
    • close

      public void close()
      Description copied from interface: SearchClient
      Closes any underlying resources.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface SearchClient