Class SearchClient
Overview
Conceptually, a document is an entity in your index. Mapping this concept to more familiar database equivalents: a search index equates to a table, and documents are roughly equivalent to rows in a table. Documents exist only in an index, and are retrieved only through queries that target the documents collection (/docs) of an index. All operations performed on the collection such as uploading, merging, deleting, or querying documents take place in the context of a single index, so the URL format document operations will always include /indexes/[index name]/docs for a given index name.
This client provides a synchronous API for accessing and performing operations on indexed documents. This client assists with searching your indexed documents, autocompleting partially typed search terms based on documents within the index, suggesting the most likely matching text in documents as a user types. The client provides operations for adding, updating, and deleting documents from an index.
Getting Started
Authenticating and building instances of this client are handled by SearchClientBuilder. This sample shows
you how to authenticate and create an instance of the client:
SearchClient searchClient = new SearchClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.indexName("{indexName}")
.buildClient();
For more information on authentication and building, see the SearchClientBuilder documentation.
Examples
The following examples all use a simple Hotel data set that you can import into your own index from the Azure portal. These are just a few of the basics - please check out our Samples for much more.
Upload a Document
The following sample uploads a new document to an index.
List<Hotel> hotels = new ArrayList<>();
hotels.add(new Hotel().setHotelId("100"));
hotels.add(new Hotel().setHotelId("200"));
hotels.add(new Hotel().setHotelId("300"));
searchClient.uploadDocuments(hotels);
For an asynchronous sample see SearchAsyncClient.uploadDocuments(Iterable).
Merge a Document
The following sample merges documents in an index.
List<Hotel> hotels = new ArrayList<>();
hotels.add(new Hotel().setHotelId("100"));
hotels.add(new Hotel().setHotelId("200"));
searchClient.mergeDocuments(hotels);
For an asynchronous sample see SearchAsyncClient.mergeDocuments(Iterable).
Delete a Document
The following sample deletes a document from an index.
SearchDocument documentId = new SearchDocument();
documentId.put("hotelId", "100");
searchClient.deleteDocuments(Collections.singletonList(documentId));
For an asynchronous sample see SearchAsyncClient.deleteDocuments(Iterable).
Get a Document
The following sample gets a document from an index.
Hotel hotel = searchClient.getDocument("100", Hotel.class);
System.out.printf("Retrieved Hotel %s%n", hotel.getHotelId());
For an asynchronous sample see SearchAsyncClient.getDocument(String, Class).
Search Documents
The following sample searches for documents within an index.
SearchDocument searchDocument = new SearchDocument();
searchDocument.put("hotelId", "8");
searchDocument.put("description", "budget");
searchDocument.put("descriptionFr", "motel");
SearchDocument searchDocument1 = new SearchDocument();
searchDocument1.put("hotelId", "9");
searchDocument1.put("description", "budget");
searchDocument1.put("descriptionFr", "motel");
List<SearchDocument> searchDocuments = new ArrayList<>();
searchDocuments.add(searchDocument);
searchDocuments.add(searchDocument1);
searchClient.uploadDocuments(searchDocuments);
SearchPagedIterable results = searchClient.search("SearchText");
System.out.printf("There are %s results.%n", results.getTotalCount());
For an asynchronous sample see SearchAsyncClient.search(String).
Make a Suggestion
The following sample suggests the most likely matching text in documents.
SuggestPagedIterable suggestPagedIterable = searchClient.suggest("searchText", "sg");
for (SuggestResult result: suggestPagedIterable) {
System.out.printf("The suggested text is %s", result.getText());
}
For an asynchronous sample see SearchAsyncClient.suggest(String, String).
Provide an Autocompletion
The following sample provides autocompletion for a partially typed query.
AutocompletePagedIterable autocompletePagedIterable = searchClient.autocomplete("searchText", "sg");
for (AutocompleteItem result: autocompletePagedIterable) {
System.out.printf("The complete term is %s", result.getText());
}
For an asynchronous sample see SearchAsyncClient.autocomplete(String, String).
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionautocomplete(String searchText, String suggesterName) Autocompletes incomplete query terms based on input text and matching terms in the index.autocomplete(String searchText, String suggesterName, AutocompleteOptions autocompleteOptions, com.azure.core.util.Context context) Autocompletes incomplete query terms based on input text and matching terms in the index.deleteDocuments(Iterable<?> documents) Deletes a collection of documents from the target index.com.azure.core.http.rest.Response<IndexDocumentsResult> deleteDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Deletes a collection of documents from the target index.<T> TgetDocument(String key, Class<T> modelClass) Retrieves a document from the Azure AI Search index.longQueries the number of documents in the search index.com.azure.core.http.rest.Response<Long> getDocumentCountWithResponse(com.azure.core.util.Context context) Queries the number of documents in the search index.<T> com.azure.core.http.rest.Response<T> getDocumentWithResponse(String key, Class<T> modelClass, List<String> selectedFields, com.azure.core.util.Context context) Retrieves a document from the Azure AI Search index.Gets the endpoint for the Azure AI Search service.Gets the name of the Azure AI Search index.indexDocuments(IndexDocumentsBatch<?> batch) Sends a batch of upload, merge, and/or delete actions to the search index.com.azure.core.http.rest.Response<IndexDocumentsResult> indexDocumentsWithResponse(IndexDocumentsBatch<?> batch, IndexDocumentsOptions options, com.azure.core.util.Context context) Sends a batch of upload, merge, and/or delete actions to the search index.mergeDocuments(Iterable<?> documents) Merges a collection of documents with existing documents in the target index.com.azure.core.http.rest.Response<IndexDocumentsResult> mergeDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Merges a collection of documents with existing documents in the target index.mergeOrUploadDocuments(Iterable<?> documents) This action behaves like merge if a document with the given key already exists in the index.com.azure.core.http.rest.Response<IndexDocumentsResult> mergeOrUploadDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) This action behaves like merge if a document with the given key already exists in the index.Searches for documents in the Azure AI Search index.search(String searchText, SearchOptions searchOptions, com.azure.core.util.Context context) Searches for documents in the Azure AI Search index.Suggests documents in the index that match the given partial query.suggest(String searchText, String suggesterName, SuggestOptions suggestOptions, com.azure.core.util.Context context) Suggests documents in the index that match the given partial query.uploadDocuments(Iterable<?> documents) Uploads a collection of documents to the target index.com.azure.core.http.rest.Response<IndexDocumentsResult> uploadDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Uploads a collection of documents to the target index.
-
Method Details
-
getIndexName
Gets the name of the Azure AI Search index.- Returns:
- the indexName value.
-
getEndpoint
Gets the endpoint for the Azure AI Search service.- Returns:
- the endpoint value.
-
uploadDocuments
Uploads a collection of documents to the target index.Code Sample
Upload dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); IndexDocumentsResult result = SEARCH_CLIENT.uploadDocuments(Collections.singletonList(searchDocument)); for (IndexingResult indexingResult : result.getResults()) { System.out.printf("Does document with key %s upload successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to upload to the target Index.- Returns:
- document index result.
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
uploadDocumentsWithResponse
public com.azure.core.http.rest.Response<IndexDocumentsResult> uploadDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Uploads a collection of documents to the target index.Code Sample
Upload dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); Response<IndexDocumentsResult> resultResponse = SEARCH_CLIENT.uploadDocumentsWithResponse( Collections.singletonList(searchDocument), null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (IndexingResult indexingResult : resultResponse.getValue().getResults()) { System.out.printf("Does document with key %s upload successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to upload to the target Index.options- Options that allow specifying document indexing behavior.context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing the document index result.
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
mergeDocuments
Merges a collection of documents with existing documents in the target index.If the type of the document contains non-nullable primitive-typed properties, these properties may not merge correctly. If you do not set such a property, it will automatically take its default value (for example,
0forintor false forboolean), which will override the value of the property currently stored in the index, even if this was not your intent. For this reason, it is strongly recommended that you always declare primitive-typed properties with their class equivalents (for example, an integer property should be of typeIntegerinstead ofint).Code Sample
Merge dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelName", "merge"); IndexDocumentsResult result = SEARCH_CLIENT.mergeDocuments(Collections.singletonList(searchDocument)); for (IndexingResult indexingResult : result.getResults()) { System.out.printf("Does document with key %s merge successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to be merged- Returns:
- document index result
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
mergeDocumentsWithResponse
public com.azure.core.http.rest.Response<IndexDocumentsResult> mergeDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Merges a collection of documents with existing documents in the target index.If the type of the document contains non-nullable primitive-typed properties, these properties may not merge correctly. If you do not set such a property, it will automatically take its default value (for example,
0forintor false forboolean), which will override the value of the property currently stored in the index, even if this was not your intent. For this reason, it is strongly recommended that you always declare primitive-typed properties with their class equivalents (for example, an integer property should be of typeIntegerinstead ofint).Code Sample
Merge dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelName", "test"); Response<IndexDocumentsResult> resultResponse = SEARCH_CLIENT.mergeDocumentsWithResponse( Collections.singletonList(searchDocument), null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (IndexingResult indexingResult : resultResponse.getValue().getResults()) { System.out.printf("Does document with key %s merge successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to be merged.options- Options that allow specifying document indexing behavior.context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing the document index result.
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
mergeOrUploadDocuments
This action behaves like merge if a document with the given key already exists in the index. If the document does not exist, it behaves like upload with a new document.If the type of the document contains non-nullable primitive-typed properties, these properties may not merge correctly. If you do not set such a property, it will automatically take its default value (for example,
0forintor false forboolean), which will override the value of the property currently stored in the index, even if this was not your intent. For this reason, it is strongly recommended that you always declare primitive-typed properties with their class equivalents (for example, an integer property should be of typeIntegerinstead ofint).Code Sample
Merge or upload dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); IndexDocumentsResult result = SEARCH_CLIENT.mergeOrUploadDocuments(Collections.singletonList(searchDocument)); for (IndexingResult indexingResult : result.getResults()) { System.out.printf("Does document with key %s mergeOrUpload successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to be merged, if exists, otherwise uploaded- Returns:
- document index result
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
mergeOrUploadDocumentsWithResponse
public com.azure.core.http.rest.Response<IndexDocumentsResult> mergeOrUploadDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) This action behaves like merge if a document with the given key already exists in the index. If the document does not exist, it behaves like upload with a new document.If the type of the document contains non-nullable primitive-typed properties, these properties may not merge correctly. If you do not set such a property, it will automatically take its default value (for example,
0forintor false forboolean), which will override the value of the property currently stored in the index, even if this was not your intent. For this reason, it is strongly recommended that you always declare primitive-typed properties with their class equivalents (for example, an integer property should be of typeIntegerinstead ofint).Code Sample
Merge or upload dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); Response<IndexDocumentsResult> resultResponse = SEARCH_CLIENT.mergeOrUploadDocumentsWithResponse( Collections.singletonList(searchDocument), null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (IndexingResult indexingResult : resultResponse.getValue().getResults()) { System.out.printf("Does document with key %s mergeOrUpload successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to be merged, if exists, otherwise uploadedoptions- Options that allow specifying document indexing behavior.context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing a document index result
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
deleteDocuments
Deletes a collection of documents from the target index.Code Sample
Delete dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); IndexDocumentsResult result = SEARCH_CLIENT.deleteDocuments(Collections.singletonList(searchDocument)); for (IndexingResult indexingResult : result.getResults()) { System.out.printf("Does document with key %s delete successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to delete from the target Index. Fields other than the key are ignored.- Returns:
- document index result.
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
deleteDocumentsWithResponse
public com.azure.core.http.rest.Response<IndexDocumentsResult> deleteDocumentsWithResponse(Iterable<?> documents, IndexDocumentsOptions options, com.azure.core.util.Context context) Deletes a collection of documents from the target index.Code Sample
Delete dynamic SearchDocument.
SearchDocument searchDocument = new SearchDocument(); searchDocument.put("hotelId", "1"); searchDocument.put("hotelName", "test"); Response<IndexDocumentsResult> resultResponse = SEARCH_CLIENT.deleteDocumentsWithResponse( Collections.singletonList(searchDocument), null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (IndexingResult indexingResult : resultResponse.getValue().getResults()) { System.out.printf("Does document with key %s delete successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
documents- collection of documents to delete from the target Index. Fields other than the key are ignored.options- Options that allow specifying document indexing behavior.context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing a document index result.
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
indexDocuments
Sends a batch of upload, merge, and/or delete actions to the search index.Code Sample
Index batch operation on dynamic SearchDocument.
SearchDocument searchDocument1 = new SearchDocument(); searchDocument1.put("hotelId", "1"); searchDocument1.put("hotelName", "test1"); SearchDocument searchDocument2 = new SearchDocument(); searchDocument2.put("hotelId", "2"); searchDocument2.put("hotelName", "test2"); IndexDocumentsBatch<SearchDocument> indexDocumentsBatch = new IndexDocumentsBatch<>(); indexDocumentsBatch.addUploadActions(Collections.singletonList(searchDocument1)); indexDocumentsBatch.addDeleteActions(Collections.singletonList(searchDocument2)); IndexDocumentsResult result = SEARCH_CLIENT.indexDocuments(indexDocumentsBatch); for (IndexingResult indexingResult : result.getResults()) { System.out.printf("Does document with key %s finish successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
batch- The batch of index actions- Returns:
- Response containing the status of operations for all actions in the batch
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
indexDocumentsWithResponse
public com.azure.core.http.rest.Response<IndexDocumentsResult> indexDocumentsWithResponse(IndexDocumentsBatch<?> batch, IndexDocumentsOptions options, com.azure.core.util.Context context) Sends a batch of upload, merge, and/or delete actions to the search index.Code Sample
Index batch operation on dynamic SearchDocument.
SearchDocument searchDocument1 = new SearchDocument(); searchDocument1.put("hotelId", "1"); searchDocument1.put("hotelName", "test1"); SearchDocument searchDocument2 = new SearchDocument(); searchDocument2.put("hotelId", "2"); searchDocument2.put("hotelName", "test2"); IndexDocumentsBatch<SearchDocument> indexDocumentsBatch = new IndexDocumentsBatch<>(); indexDocumentsBatch.addUploadActions(Collections.singletonList(searchDocument1)); indexDocumentsBatch.addDeleteActions(Collections.singletonList(searchDocument2)); Response<IndexDocumentsResult> resultResponse = SEARCH_CLIENT.indexDocumentsWithResponse(indexDocumentsBatch, null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (IndexingResult indexingResult : resultResponse.getValue().getResults()) { System.out.printf("Does document with key %s finish successfully? %b%n", indexingResult.getKey(), indexingResult.isSucceeded()); }- Parameters:
batch- The batch of index actionsoptions- Options that allow specifying document indexing behavior.context- additional context that is passed through the Http pipeline during the service call- Returns:
- Response containing the status of operations for all actions in the batch
- Throws:
IndexBatchException- If some of the indexing actions fail but other actions succeed and modify the state of the index. This can happen when the Search Service is under heavy indexing load. It is important to explicitly catch this exception and check the return valueIndexBatchException.getIndexingResults(). The indexing result reports the status of each indexing action in the batch, making it possible to determine the state of the index after a partial failure.- See Also:
-
getDocument
Retrieves a document from the Azure AI Search index.View naming rules for guidelines on constructing valid document keys.
Code Sample
Get dynamic SearchDocument.
SearchDocument result = SEARCH_CLIENT.getDocument("hotelId", SearchDocument.class); for (Map.Entry<String, Object> keyValuePair : result.entrySet()) { System.out.printf("Document key %s, Document value %s", keyValuePair.getKey(), keyValuePair.getValue()); }- Type Parameters:
T- Convert document to the generic type.- Parameters:
key- The key of the document to retrieve.modelClass- The model class converts to.- Returns:
- document object
- See Also:
-
getDocumentWithResponse
public <T> com.azure.core.http.rest.Response<T> getDocumentWithResponse(String key, Class<T> modelClass, List<String> selectedFields, com.azure.core.util.Context context) Retrieves a document from the Azure AI Search index.View naming rules for guidelines on constructing valid document keys.
Code Sample
Get dynamic SearchDocument.
Response<SearchDocument> resultResponse = SEARCH_CLIENT.getDocumentWithResponse("hotelId", SearchDocument.class, null, new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + resultResponse.getStatusCode()); for (Map.Entry<String, Object> keyValuePair : resultResponse.getValue().entrySet()) { System.out.printf("Document key %s, Document value %s", keyValuePair.getKey(), keyValuePair.getValue()); }- Type Parameters:
T- Convert document to the generic type.- Parameters:
key- The key of the document to retrieve.modelClass- The model class converts to.selectedFields- List of field names to retrieve for the document; Any field not retrieved will have null or default as its corresponding property value in the returned object.context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing a document object
- See Also:
-
getDocumentCount
public long getDocumentCount()Queries the number of documents in the search index.Code Sample
Get document count.
long count = SEARCH_CLIENT.getDocumentCount(); System.out.printf("There are %d documents in service.", count);- Returns:
- the number of documents.
-
getDocumentCountWithResponse
public com.azure.core.http.rest.Response<Long> getDocumentCountWithResponse(com.azure.core.util.Context context) Queries the number of documents in the search index.Code Sample
Get document count.
Response<Long> countResponse = SEARCH_CLIENT.getDocumentCountWithResponse(new Context(KEY_1, VALUE_1)); System.out.println("The status code of the response is " + countResponse.getStatusCode()); System.out.printf("There are %d documents in service.", countResponse.getValue());- Parameters:
context- additional context that is passed through the Http pipeline during the service call- Returns:
- response containing the number of documents.
-
search
Searches for documents in the Azure AI Search index.If
searchTextis set to null or"*"all documents will be matched, see simple query syntax in Azure AI Search for more information about search query syntax.The
SearchPagedIterablewill iterate through search result pages until all search results are returned. Each page is determined by the$skipand$topvalues and the Search service has a limit on the number of documents that can be skipped, more information about the$skiplimit can be found at Search Documents REST API and reading the$skipdescription. If the total number of results exceeds the$skiplimit theSearchPagedIterablewon't prevent you from exceeding the$skiplimit. To prevent exceeding the limit you can track the number of documents returned and stop requesting new pages when the limit is reached.Code Sample
Search text from documents in service.
SearchPagedIterable searchPagedIterable = SEARCH_CLIENT.search("searchText"); System.out.printf("There are around %d results.", searchPagedIterable.getTotalCount()); long numberOfDocumentsReturned = 0; for (SearchPagedResponse resultResponse: searchPagedIterable.iterableByPage()) { System.out.println("The status code of the response is " + resultResponse.getStatusCode()); numberOfDocumentsReturned += resultResponse.getValue().size(); resultResponse.getValue().forEach(searchResult -> { for (Map.Entry<String, Object> keyValuePair: searchResult .getDocument(SearchDocument.class).entrySet()) { System.out.printf("Document key %s, document value %s", keyValuePair.getKey(), keyValuePair.getValue()); } }); if (numberOfDocumentsReturned >= SEARCH_SKIP_LIMIT) { // Reached the $skip limit, stop requesting more documents. break; } }- Parameters:
searchText- A full-text search query expression.- Returns:
- A
SearchPagedIterablethat iterates overSearchResultobjects and provides access to theSearchPagedResponseobject for each page containing HTTP response and count, facet, and coverage information. - See Also:
-
search
public SearchPagedIterable search(String searchText, SearchOptions searchOptions, com.azure.core.util.Context context) Searches for documents in the Azure AI Search index.If
searchTextis set to null or"*"all documents will be matched, see simple query syntax in Azure AI Search for more information about search query syntax.The
SearchPagedIterablewill iterate through search result pages until all search results are returned. Each page is determined by the$skipand$topvalues and the Search service has a limit on the number of documents that can be skipped, more information about the$skiplimit can be found at Search Documents REST API and reading the$skipdescription. If the total number of results exceeds the$skiplimit theSearchPagedIterablewon't prevent you from exceeding the$skiplimit. To prevent exceeding the limit you can track the number of documents returned and stop requesting new pages when the limit is reached.Code Sample
Search text from documents in service with option.
SearchPagedIterable searchPagedIterable = SEARCH_CLIENT.search("searchText", new SearchOptions().setOrderBy("hotelId desc"), new Context(KEY_1, VALUE_1)); System.out.printf("There are around %d results.", searchPagedIterable.getTotalCount()); long numberOfDocumentsReturned = 0; for (SearchPagedResponse resultResponse: searchPagedIterable.iterableByPage()) { System.out.println("The status code of the response is " + resultResponse.getStatusCode()); numberOfDocumentsReturned += resultResponse.getValue().size(); resultResponse.getValue().forEach(searchResult -> { for (Map.Entry<String, Object> keyValuePair: searchResult .getDocument(SearchDocument.class).entrySet()) { System.out.printf("Document key %s, document value %s", keyValuePair.getKey(), keyValuePair.getValue()); } }); if (numberOfDocumentsReturned >= SEARCH_SKIP_LIMIT) { // Reached the $skip limit, stop requesting more documents. break; } }- Parameters:
searchText- A full-text search query expression.searchOptions- Parameters to further refine the search querycontext- additional context that is passed through the Http pipeline during the service call- Returns:
- A
SearchPagedIterablethat iterates overSearchResultobjects and provides access to theSearchPagedResponseobject for each page containing HTTP response and count, facet, and coverage information. - See Also:
-
suggest
Suggests documents in the index that match the given partial query.Code Sample
Suggest text from documents in service.
SuggestPagedIterable suggestPagedIterable = SEARCH_CLIENT.suggest("searchText", "sg"); for (SuggestResult result: suggestPagedIterable) { SearchDocument searchDocument = result.getDocument(SearchDocument.class); for (Map.Entry<String, Object> keyValuePair: searchDocument.entrySet()) { System.out.printf("Document key %s, document value %s", keyValuePair.getKey(), keyValuePair.getValue()); } }- Parameters:
searchText- The search text on which to base suggestionssuggesterName- The name of the suggester as specified in the suggesters collection that's part of the index definition- Returns:
- A
SuggestPagedIterablethat iterates overSuggestResultobjects and provides access to theSuggestPagedResponseobject for each page containing HTTP response and coverage information. - See Also:
-
suggest
public SuggestPagedIterable suggest(String searchText, String suggesterName, SuggestOptions suggestOptions, com.azure.core.util.Context context) Suggests documents in the index that match the given partial query.Code Sample
Suggest text from documents in service with option.
SuggestPagedIterable suggestPagedIterable = SEARCH_CLIENT.suggest("searchText", "sg", new SuggestOptions().setOrderBy("hotelId desc"), new Context(KEY_1, VALUE_1)); for (SuggestResult result: suggestPagedIterable) { SearchDocument searchDocument = result.getDocument(SearchDocument.class); for (Map.Entry<String, Object> keyValuePair: searchDocument.entrySet()) { System.out.printf("Document key %s, document value %s", keyValuePair.getKey(), keyValuePair.getValue()); } }- Parameters:
searchText- The search text on which to base suggestionssuggesterName- The name of the suggester as specified in the suggesters collection that's part of the index definitionsuggestOptions- Parameters to further refine the suggestion query.context- additional context that is passed through the Http pipeline during the service call- Returns:
- A
SuggestPagedIterablethat iterates overSuggestResultobjects and provides access to theSuggestPagedResponseobject for each page containing HTTP response and coverage information. - See Also:
-
autocomplete
Autocompletes incomplete query terms based on input text and matching terms in the index.Code Sample
Autocomplete text from documents in service.
AutocompletePagedIterable autocompletePagedIterable = SEARCH_CLIENT.autocomplete("searchText", "sg"); for (AutocompleteItem result: autocompletePagedIterable) { System.out.printf("The complete term is %s", result.getText()); }- Parameters:
searchText- search textsuggesterName- suggester name- Returns:
- auto complete result.
-
autocomplete
public AutocompletePagedIterable autocomplete(String searchText, String suggesterName, AutocompleteOptions autocompleteOptions, com.azure.core.util.Context context) Autocompletes incomplete query terms based on input text and matching terms in the index.Code Sample
Autocomplete text from documents in service with option.
AutocompletePagedIterable autocompletePagedIterable = SEARCH_CLIENT.autocomplete("searchText", "sg", new AutocompleteOptions().setAutocompleteMode(AutocompleteMode.ONE_TERM_WITH_CONTEXT), new Context(KEY_1, VALUE_1)); for (AutocompleteItem result: autocompletePagedIterable) { System.out.printf("The complete term is %s", result.getText()); }- Parameters:
searchText- search textsuggesterName- suggester nameautocompleteOptions- autocomplete optionscontext- additional context that is passed through the HTTP pipeline during the service call- Returns:
- auto complete result.
-