Interface SearchIndexAccessor
-
- All Known Implementing Classes:
DelegatingSearchIndexAccessor,EdgeSearchIndexAccessor,LuceneSearchIndexAccessor
@ThreadSafe public interface SearchIndexAccessorAn V2 interface which provides the following thread-safe actions on a search index:- Searching by
search(ISearch, Set),scan(SearchQuery, Set, Consumer) - Writing by
execute(SearchIndexAction) - Transactional execution of searches and writes via
withBatchUpdate(BatchUpdateAction) - Resets via
reset(Runnable) - Snapshotting via
reset(Runnable)
CustomSearchIndexRegistryor extendDelegatingSearchIndexAccessor.WARNING: there is no default permissions checking behaviour provided. You MUST provide a search which specifies permissions checking. See
SiteSearchPermissionsQueryFactoryto add one yourself. SeePredefinedSearchBuilderto build a pre-defined search which contains permission checking.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidexecute(SearchIndexAction action)Executes a SearchIndexAction on the underlying search index.intnumDocs()Get the total number of index documents for the underlying search indexvoidreset(Runnable replaceIndex)Execute a method after the index has been closed and before the index has been reopenedlongscan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<ScannedDocument> consumer, float defaultScore)Scans the index for documents that match the provided searchQuery.longscan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<Map<String,String[]>> consumer)Scans the index for documents that match the provided searchQuery.SearchResultssearch(ISearch search, Set<String> requestedFields)Perform asearch, the returnedSearchResultsonly have the fields requested in the projection filled out, no other fields are valid in thesearchResult.voidsnapshot(File destinationDirectory)Take a snapshot of the current index and store it into the destination directoryvoidwithBatchUpdate(BatchUpdateAction batchUpdateAction)Execute the update action in a batch.
-
-
-
Method Detail
-
search
SearchResults search(ISearch search, Set<String> requestedFields) throws InvalidSearchException
Perform asearch, the returnedSearchResultsonly have the fields requested in the projection filled out, no other fields are valid in thesearchResult.SearchResults will throw an
FieldNotRequestedExceptionif 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_LIMITand the startOffset will be capped atSearchConstants.MAX_START_OFFSETfor more efficient heap usage. SeeSearchResults.getNextPageSearch()for pagination.WARNING: there is no default permissions checking behaviour provided. You MUST provide a search which specifies permissions checking. See
SiteSearchPermissionsQueryFactoryto add one yourself. SeePredefinedSearchBuilderto build a pre-defined search which contains permission checking.- Parameters:
search- the search to perform.requestedFields- requested fields. Passingnullwill 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:
ISearch,SiteSearchPermissionsQueryFactory,SearchConstants.MAX_LIMIT,SearchConstants.MAX_START_OFFSET,SearchResults.getNextPageSearch(),PredefinedSearchBuilder
-
scan
long scan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<Map<String,String[]>> consumer)
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
SiteSearchPermissionsQueryFactoryto add one yourself. SeePredefinedSearchBuilderto build a pre-defined search which contains permission checking.- 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[] Passingnullwill 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.
- Throws:
SearchIndexAccessException- if there is an IO error.- See Also:
SiteSearchPermissionsQueryFactory,PredefinedSearchBuilder
-
scan
long scan(SearchQuery searchQuery, Set<String> requestedFields, Consumer<ScannedDocument> consumer, float defaultScore)
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 intoScannedDocument, 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
SiteSearchPermissionsQueryFactoryto add one yourself. SeePredefinedSearchBuilderto build a pre-defined search which contains permission checking.- 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[] Passingnullwill 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 theScannedDocumentif it is not possible to retrieve the score for the document.- Returns:
- the number of documents that matched the searchQuery.
- Throws:
SearchIndexAccessException- if there is an IO error.- See Also:
SiteSearchPermissionsQueryFactory,PredefinedSearchBuilder
-
execute
void execute(SearchIndexAction action) throws SearchIndexAccessException
Executes a SearchIndexAction on the underlying search index.- Parameters:
action- SearchIndexAction- Throws:
SearchIndexAccessException- if there is an io error.
-
numDocs
int numDocs() throws SearchIndexAccessExceptionGet the total number of index documents for the underlying search index- Returns:
- the total number of index documents
- Throws:
SearchIndexAccessException
-
withBatchUpdate
void withBatchUpdate(BatchUpdateAction batchUpdateAction)
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.- Parameters:
batchUpdateAction- the batch update action
-
snapshot
void snapshot(File destinationDirectory) throws SearchIndexAccessException
Take a snapshot of the current index and store it into the destination directory- Parameters:
destinationDirectory- the destination directory- Throws:
SearchIndexAccessException- if the snapshot could not be takenUnsupportedOperationException- when using a SearchIndexAccessor for the main or change indexes.- Since:
- 7.16
-
reset
void reset(Runnable replaceIndex)
Execute a method after the index has been closed and before the index has been reopened- Parameters:
replaceIndex- the method that needs to be executed
-
-