Class QueryProcessor<T>

    • Field Detail

      • start

        protected int start
    • Method Detail

      • enforceVisibility

        public QueryProcessor<T> enforceVisibility​(boolean enforce)
        Specify whether to enforce visibility by filtering out results that are not visible to the user.

        Enforcing visibility may have performance consequences, as the index system may need to post-filter a large number of results to fill even a modest limit.

        If visibility is enforced, the user's queryLimit global capability is also used to bound the total number of results. If this capability is non-positive, this results in the entire query processor being disabled.

        Parameters:
        enforce - whether to enforce visibility.
        Returns:
        this.
      • setUserProvidedLimit

        public QueryProcessor<T> setUserProvidedLimit​(int n)
        Set an end-user-provided limit on the number of results returned.

        Since this limit is provided by an end user, it may exceed the limit that they are authorized to use. This is allowed; the processor will take multiple possible limits into account and choose the one that makes the most sense.

        Parameters:
        n - limit; zero or negative means no limit.
        Returns:
        this.
      • query

        public List<QueryResult<T>> query​(List<Predicate<T>> queries)
                                   throws QueryParseException
        Perform multiple queries in parallel.

        If querying is disabled, short-circuits the index and returns empty results. Callers that wish to distinguish this case from a query returning no results from the index may call isDisabled() themselves.

        Parameters:
        queries - list of queries.
        Returns:
        results of the queries, one QueryResult per input query, in the same order as the input.
        Throws:
        QueryParseException
      • createOptions

        protected QueryOptions createOptions​(IndexConfig indexConfig,
                                             int start,
                                             int pageSize,
                                             int pageSizeMultiplier,
                                             int limit,
                                             Set<String> requestedFields)
      • enforceVisibility

        protected abstract Predicate<T> enforceVisibility​(Predicate<T> pred)
        Invoked after the query was rewritten. Subclasses must overwrite this method to filter out results that are not visible to the calling user.
        Parameters:
        pred - the query
        Returns:
        the modified query
      • isDisabled

        public boolean isDisabled()
        Check whether querying should be disabled.

        Currently, the only condition that can disable the whole query processor is if both visibility is enforced and the user has a non-positive maximum value for the queryLimit capability.

        If querying is disabled, all calls to query(Predicate) and query(List) will return empty results. This method can be used if callers wish to distinguish this case from a query returning no results from the index.

        Returns:
        true if querying should be disabled.
      • getEffectiveLimit

        public int getEffectiveLimit​(Predicate<T> p)
      • getUserQueryLimit

        protected IntSupplier getUserQueryLimit()
      • getInitialPageSize

        protected int getInitialPageSize​(int queryLimit)
      • formatForLogging

        protected abstract String formatForLogging​(T t)
      • getIndexSize

        protected abstract int getIndexSize()
      • getBatchSize

        protected abstract int getBatchSize()