Class DelegatingSearchIndexAccessor

java.lang.Object
com.atlassian.confluence.search.v2.DelegatingSearchIndexAccessor
All Implemented Interfaces:
SearchIndexAccessor
Direct Known Subclasses:
EdgeSearchIndexAccessor

public abstract class DelegatingSearchIndexAccessor extends Object implements SearchIndexAccessor
An abstract delegating SearchIndexAccessor that can be extended by a custom accessor.
Since:
7.17
  • Constructor Details

  • Method Details

    • search

      public SearchResults search(ISearch search, Set<String> requestedFields) throws InvalidSearchException
      Description copied from interface: SearchIndexAccessor
      Perform a search, the returned SearchResults only have the fields requested in the projection filled out, no other fields are valid in the searchResult.

      SearchResults will throw an FieldNotRequestedException if an attempt is made to access a field value that has not had it's key included in the projection Set.

      NOTE: the search limit will be capped at SearchConstants.MAX_LIMIT and the startOffset will be capped at SearchConstants.MAX_START_OFFSET for more efficient heap usage. See SearchResults.getNextPageSearch() for pagination.

      WARNING: there is no default permissions checking behaviour provided. You MUST provide a search which specifies permissions checking. See SiteSearchPermissionsQueryFactory to add one yourself. See PredefinedSearchBuilder to build a pre-defined search which contains permission checking.

      Specified by:
      search in interface SearchIndexAccessor
      Parameters:
      search - the search to perform.
      requestedFields - requested fields. Passing null will request all fields, and passing empty set will request none.
      Throws:
      InvalidSearchException - if some error occurred converting the search object into * a search that could be performed in the back-end. Usually this is a sign that some plugin that was * used to create the search is no longer available.
      See Also:
    • scan

      public long scan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<Map<String,String[]>> consumer)
      Description copied from interface: SearchIndexAccessor
      Scans the index for documents that match the provided searchQuery. The requestedFields set is used to specify which values need to be returned. The consumer will collect all the results found by the scan.

      Note that it is possible for a document to match the query, but not have any of the requested fields. This will result in an empty String[] for those fields that don't exist on the document. If you don't want to return those documents, you should specify a consumer that filters these out.

      WARNING: there is no default permissions checking behaviour provided. You MUST provide a search which specifies permissions checking. See SiteSearchPermissionsQueryFactory to add one yourself. See PredefinedSearchBuilder to build a pre-defined search which contains permission checking.

      Specified by:
      scan in interface SearchIndexAccessor
      Parameters:
      searchQuery - SearchQuery to scan the index for.
      requestedFields - Set of field names that are requested from the index. Any fields provided here that is not on the document will return an empty String[] Passing null will request all fields, and passing empty set will request none.
      consumer - Consumer that handles each found document.
      Returns:
      the number of documents that matched the searchQuery.
      See Also:
    • scan

      public long scan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<ScannedDocument> consumer, float defaultScore)
      Description copied from interface: SearchIndexAccessor
      Scans the index for documents that match the provided searchQuery. The requestedFields set is used to specify which values need to be returned. The consumer will collect all the results found by the scan and convert them into ScannedDocument, which contains a score (if scoreIncluded is true) and a field-value map of the requested fields.

      Note that it is possible for a document to match the query, but not have any of the requested fields as the other scan method.

      This will result in an empty String[] for those fields that don't exist on the document. If you don't want to return those documents, you should specify a consumer that filters these out.

      WARNING: there is no default permissions checking behaviour provided. You MUST provide a search which specifies permissions checking. See SiteSearchPermissionsQueryFactory to add one yourself. See PredefinedSearchBuilder to build a pre-defined search which contains permission checking.

      Specified by:
      scan in interface SearchIndexAccessor
      Parameters:
      searchQuery - SearchQuery to scan the index for.
      requestedFields - Set of field names that are requested from the index. Any fields provided here that is not on the document will return an empty String[] Passing null will request all fields, and passing empty set will request none.
      consumer - Consumer that handles each found document.
      defaultScore - a default score to be included in the ScannedDocument if it is not possible to retrieve the score for the document.
      Returns:
      the number of documents that matched the searchQuery.
      See Also:
    • execute

      public void execute(SearchIndexAction action) throws SearchIndexAccessException
      Description copied from interface: SearchIndexAccessor
      Executes a SearchIndexAction on the underlying search index.
      Specified by:
      execute in interface SearchIndexAccessor
      Parameters:
      action - SearchIndexAction
      Throws:
      SearchIndexAccessException - if there is an io error.
    • numDocs

      public int numDocs() throws SearchIndexAccessException
      Description copied from interface: SearchIndexAccessor
      Get the total number of index documents for the underlying search index
      Specified by:
      numDocs in interface SearchIndexAccessor
      Returns:
      the total number of index documents
      Throws:
      SearchIndexAccessException
    • getSizeInBytes

      public long getSizeInBytes() throws SearchIndexAccessException
      Description copied from interface: SearchIndexAccessor
      Get the total size of the index in bytes.
      Specified by:
      getSizeInBytes in interface SearchIndexAccessor
      Returns:
      size of the index in bytes
      Throws:
      SearchIndexAccessException
    • withBatchUpdate

      public void withBatchUpdate(BatchUpdateAction batchUpdateAction)
      Description copied from interface: SearchIndexAccessor
      Execute the update action in a batch. Executions are transactional, reads can't see any writes made and the index will be locked for updating by other threads. Currently, there is no rollback when the transaction fails for any reason. This is a bug which will be investigated in future.
      Specified by:
      withBatchUpdate in interface SearchIndexAccessor
      Parameters:
      batchUpdateAction - the batch update action
    • snapshot

      public void snapshot(File destinationDirectory) throws SearchIndexAccessException
      Description copied from interface: SearchIndexAccessor
      Take a snapshot of the current index and store it into the destination directory
      Specified by:
      snapshot in interface SearchIndexAccessor
      Parameters:
      destinationDirectory - the destination directory
      Throws:
      SearchIndexAccessException - if the snapshot could not be taken
    • reset

      public void reset(Runnable replaceIndex)
      Description copied from interface: SearchIndexAccessor
      Execute a method after the index has been closed and before the index has been reopened
      Specified by:
      reset in interface SearchIndexAccessor
      Parameters:
      replaceIndex - the method that needs to be executed
    • getFieldMappings

      public FieldMappings getFieldMappings()
      Specified by:
      getFieldMappings in interface SearchIndexAccessor
      Returns:
      FieldMappings associated with this index
    • refreshIndex

      public void refreshIndex() throws IOException
      Description copied from interface: SearchIndexAccessor
      Refresh the index immediately, which publishes its most recent changes and makes them available for searching. This method is only applicable to the OpenSearch platform.
      Specified by:
      refreshIndex in interface SearchIndexAccessor
      Throws:
      IOException