AppSearchManager

public class AppSearchManager extends Object

Provides access to the centralized AppSearch index maintained by the system.

AppSearch is an offline, on-device search library for managing structured data featuring:

Applications create a database by opening an AppSearchClient .

Example:

AppSearchManager appSearchManager = context.getSystemService(AppSearchManager.class);

 AppSearchManager.SearchContext searchContext = new AppSearchManager.SearchContext.Builder().
    setDatabaseName(dbName).build());
 appSearchManager.createSearchSession(searchContext, mExecutor, AppSearchClientResult -> {
      mAppSearchClient = AppSearchClientResult.getResultValue();
 });

After opening the session, a schema must be set in order to define the organizational structure of data. The schema is set by calling AppSearchClient.setSchema(SetSchemaRequest, String) . The schema is composed of a collection of AppSearchSchema objects, each of which defines a unique type of data.

Example:

AppSearchSchema emailSchemaType = new AppSearchSchema.Builder("Email")
     .addProperty(new StringPropertyConfig.Builder("subject")
        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
        .setIndexingType(PropertyConfig.INDEXING_TYPE_PREFIXES)
        .setTokenizerType(PropertyConfig.TOKENIZER_TYPE_PLAIN)
    .build()
 ).build();

 SetSchemaRequest request = new SetSchemaRequest.Builder().addSchema(emailSchemaType).build();
 mAppSearchClient.set(request, mExecutor, appSearchResult -> {
      if (appSearchResult.isSuccess()) {
           // Schema has been successfully set.
      }
 });

The basic unit of data in AppSearch is represented as a GenericDocument object, containing an ID, namespace, time-to-live, score, and properties. A namespace organizes a logical group of documents. For example, a namespace can be created to group documents on a per-account basis. An ID identifies a single document within a namespace. The combination of namespace and ID uniquely identifies a GenericDocument in the database.

Once the schema has been set, GenericDocument objects can be put into the database and indexed by calling AppSearchClient.put(PutDocumentsRequest, String) .

Example:

// Although for this example we use GenericDocument directly, we recommend extending
 // GenericDocument to create specific types (i.e. Email) with specific setters/getters.
 GenericDocument email = new GenericDocument.Builder<>(NAMESPACE, ID, EMAIL_SCHEMA_TYPE)
     .setPropertyString(“subject”, EMAIL_SUBJECT)
     .setScore(EMAIL_SCORE)
     .build();

 PutDocumentsRequest request = new PutDocumentsRequest.Builder().addGenericDocuments(email)
     .build();
 mAppSearchClient.put(request, mExecutor, appSearchBatchResult -> {
      if (appSearchBatchResult.isSuccess()) {
           // All documents have been successfully indexed.
      }
 });

Searching within the database is done by calling AppSearchClient.search(String, SearchSpec, String) and providing the query string to search for, as well as a SearchSpec .

Alternatively, AppSearchClient.getByDocumentId(GetByDocumentIdRequest, String) can be called to retrieve documents by namespace and ID.

Document removal is done either by time-to-live expiration, or explicitly calling a remove operation. Remove operations can be done by namespace and ID via AppSearchClient.remove(RemoveByDocumentIdRequest, String) , or by query via AppSearchClient.remove(String, SearchSpec, String) .

Nested Class Summary

class
Contains information about how to create the search session. 

Inherited Method Summary

Create a Mobile Website
View Site in Mobile | Classic
Share by: