Interface Index<K,​V>

  • All Known Subinterfaces:
    AccountIndex, ChangeIndex, GroupIndex

    public interface Index<K,​V>
    Secondary index implementation for arbitrary documents.

    Documents are inserted into the index and are queried by converting special Predicate instances into index-aware predicates that use the index search results as a source.

    Implementations must be thread-safe and should batch inserts/updates where appropriate.

    • Method Detail

      • getSchema

        Schema<V> getSchema()
        Returns the schema version used by this index.
      • close

        void close()
        Close this index.
      • insert

        void insert​(V obj)
        Insert a document into the index.

        Results may not be immediately visible to searchers, but should be visible within a reasonable amount of time.

        Parameters:
        obj - document object
      • replace

        void replace​(V obj)
        Update a document in the index.

        Semantically equivalent to deleting the document and reinserting it with new field values. A document that does not already exist is created. Results may not be immediately visible to searchers, but should be visible within a reasonable amount of time.

        Parameters:
        obj - document object
      • delete

        void delete​(K key)
        Delete a document from the index by key.
        Parameters:
        key - document key
      • deleteAll

        void deleteAll()
        Delete all documents from the index.
      • getSource

        DataSource<V> getSource​(Predicate<V> p,
                                QueryOptions opts)
                         throws QueryParseException
        Convert the given operator predicate into a source searching the index and returning only the documents matching that predicate.

        This method may be called multiple times for variations on the same predicate or multiple predicate subtrees in the course of processing a single query, so it should not have any side effects (e.g. starting a search in the background).

        Parameters:
        p - the predicate to match. Must be a tree containing only AND, OR, or NOT predicates as internal nodes, and IndexPredicates as leaves.
        opts - query options not implied by the predicate, such as start and limit.
        Returns:
        a source of documents matching the predicate, returned in a defined order depending on the type of documents.
        Throws:
        QueryParseException - if the predicate could not be converted to an indexed data source.
      • get

        default Optional<V> get​(K key,
                                QueryOptions opts)
        Get a single document from the index.
        Parameters:
        key - document key.
        opts - query options. Options that do not make sense in the context of a single document, such as start, will be ignored.
        Returns:
        a single document if present.
      • getRaw

        default Optional<FieldBundle> getRaw​(K key,
                                             QueryOptions opts)
        Get a single raw document from the index.
        Parameters:
        key - document key.
        opts - query options. Options that do not make sense in the context of a single document, such as start, will be ignored.
        Returns:
        an abstraction of a raw index document to retrieve fields from.
      • keyPredicate

        Predicate<V> keyPredicate​(K key)
        Get a predicate that looks up a single document by key.
        Parameters:
        key - document key.
        Returns:
        a single predicate.
      • markReady

        void markReady​(boolean ready)
        Mark whether this index is up-to-date and ready to serve reads.
        Parameters:
        ready - whether the index is ready
      • isEnabled

        default boolean isEnabled()
        Returns whether the index is enabled. true by default, but could be overridden by implementations.