algoliasearch package is version 4.
This page helps you upgrade from version 3
and explains the breaking changes you need to address.
Algolia generates the version 4 clients from OpenAPI specifications,
which provides consistent behavior across all languages and up-to-date API coverage.
The main architectural change is the removal of the initIndex pattern:
all methods are now on the client instance directly, with indexName as a parameter.
For the full list of changes, see the Java changelog.
Update your dependencies
Version 4 consolidates the separatealgoliasearch-core and HTTP client packages
into a single algoliasearch artifact.
You no longer need algoliasearch-apache or algoliasearch-java-net.
Maven
Replace your Algolia dependencies inpom.xml:
pom.xml
Gradle
Update yourbuild.gradle file:
build.gradle
Update imports
The package structure changed. Client classes moved fromcom.algolia.search to com.algolia.api,
and model classes moved to com.algolia.model.search.
Java
Java
Update client initialization
In version 3, theDefaultSearchClient.create() factory method created the client.
Version 4 removes this factory. Use the SearchClient constructor instead.
Java
Closeable.
Use try-with-resources to ensure the client is properly closed:
Java
Understand the new API surface
Version 4 introduces two major changes to the API surface:- No more
initIndex. In version 3, the client created a typedSearchIndex<T>object with methods called on it. In version 4, theSearchIndexclass is gone. All methods belong to theclientinstance, withindexNameas a parameter. - Generic type parameter moves to each method call.
In version 3, you set the result type once on
initIndex("INDEX", Record.class). In version 4, you pass the target class (for example,Hit.class) as the last argument to each method that returns typed results, such assearchSingleIndexorgetObject.
Java
Update search calls
Search a single index
Theindex.search() method is now client.searchSingleIndex().
Pass the index name, a SearchParamsObject, and the target class:
Java
Search multiple indices
Theclient.multipleQueries() method is now client.search().
Each request in the list requires an indexName:
Java
Search for facet values
Theindex.searchForFacetValues() method becomes client.searchForFacetValues()
with an indexName parameter:
Java
Update indexing operations
In version 4, indexing methods are on the client instead of the index object, withindexName as a parameter.
Add or replace records
Java
Partially update records
Java
Delete records
Java
Update settings, synonyms, and rules
Get and set settings
Java
Save synonyms and rules
Java
In version 3,
index.replaceAllRules() and index.replaceAllSynonyms() replaced all rules or synonyms.
In version 4, use client.saveRules() or client.saveSynonyms() with the clearExistingRules or clearExistingSynonyms parameter set to true.Update index management
ThecopyIndex, moveIndex, copyRules, copySynonyms, and copySettings
methods are all replaced by a single operationIndex method.
Copy an index
Java
Move (rename) an index
Java
Copy only rules or settings
In version 4, use thescope parameter to limit the operation to specific data:
Java
Check if an index exists
In version 3, you could check if an index existed using theexists method on the index object.
In version 4, use the indexExists helper method on the client:
Java
Update task handling
Version 3 supported chaining.waitTask() on operations.
Version 4 replaces this pattern with dedicated wait helpers.
Java
waitForTask: wait until indexing operations are done.waitForAppTask: wait for application-level tasks.waitForApiKey: wait for API key operations.
Helper method changes
The following sections document breaking changes in helper method signatures and behavior between version 3 and version 4.replaceAllObjects
The safe parameter has been removed. In version 3, passing safe = true caused the helper to wait after each step. In version 4, the helper always waits—equivalent to the previous safe = true behavior.
The scopes parameter is now required and must be passed explicitly.
Java
saveObjects
The autoGenerateObjectID parameter has been removed. In version 4, every object must include an objectID. To have the API generate object IDs, use chunkedBatch with Action.ADD_OBJECT. Two new optional parameters are available:
waitForTasks(defaultfalse)batchSize(default1,000)
Java
deleteObjects
Two new optional parameters are available:
waitForTasks(defaultfalse)batchSize(default1,000)
Java
partialUpdateObjects
The createIfNotExists parameter is now required—the overload without it has been removed (it previously defaulted to false).
Java
browseObjects, browseRules, browseSynonyms
These helpers no longer return iterable types (IndexIterable, RulesIterable, SynonymsIterable). In version 4, they accept an aggregator callback invoked with each page of results.
Java
waitForTask
The helper was renamed from waitTask to waitForTask. It now returns GetTaskResponse instead of void, and the timeToWait millisecond parameter is replaced by maxRetries (default 50) and a timeout function (default: exponential backoff capped at 5 seconds).
Java
waitForAppTask
This is a new helper in version 4.
Java
waitForApiKey
This is a new standalone helper in version 4.
Java
generateSecuredApiKey
The method was renamed from generateSecuredAPIKey to generateSecuredApiKey (camelCase normalization). The parameter type also changed from SecuredApiKeyRestriction (singular) to SecuredApiKeyRestrictions (plural).
Java
getSecuredApiKeyRemainingValidity
The parameter was renamed from securedAPIKey to securedApiKey (camelCase normalization).
Java
indexExists
This helper is new in version 4.
Java
chunkedBatch
chunkedBatch is now a public helper. In version 3, chunking was an internal detail of saveObjects.
Java
copyIndexBetweenApplications
In version 3, the static AccountClient class provided copyIndex and copyIndexAsync for copying an index between two Algolia applications. It accepted two typed SearchIndex<T> objects.
In version 4, AccountClient is removed. You can compose existing helpers across two clients to achieve the same result.
Java
saveObjectsWithTransformation
New in version 4. Routes objects through the Algolia Push connector. Requires the transformation region to be set at client initialization.
Java
replaceAllObjectsWithTransformation
New in version 4. Atomically replaces all objects via the Push connector (copy settings/rules/synonyms to a temp index → push objects → move back). Requires the transformation region to be set at client initialization.
Java
partialUpdateObjectsWithTransformation
New in version 4. Routes partial updates through the Push connector. The createIfNotExists parameter defaults to false.
Java
Method changes reference
The following tables list all method names that changed between version 3 and version 4.Search API client
| Version 3 (legacy) | Version 4 (current) | |
|---|---|---|
client.addApiKey | → | client.addApiKey |
client.addApiKey.wait | → | client.waitForApiKey |
client.clearDictionaryEntries | → | client.batchDictionaryEntries |
client.copyIndex | → | client.operationIndex |
client.copyRules | → | client.operationIndex |
client.copySynonyms | → | client.operationIndex |
client.deleteApiKey | → | client.deleteApiKey |
client.deleteDictionaryEntries | → | client.batchDictionaryEntries |
client.generateSecuredApiKey | → | client.generateSecuredApiKey |
client.getApiKey | → | client.getApiKey |
client.getSecuredApiKeyRemainingValidity | → | client.getSecuredApiKeyRemainingValidity |
client.listApiKeys | → | client.listApiKeys |
client.listIndices | → | client.listIndices |
client.moveIndex | → | client.operationIndex |
client.multipleBatch | → | client.multipleBatch |
client.multipleQueries | → | client.search |
client.replaceDictionaryEntries | → | client.batchDictionaryEntries |
client.restoreApiKey | → | client.restoreApiKey |
client.saveDictionaryEntries | → | client.batchDictionaryEntries |
client.updateApiKey | → | client.updateApiKey |
index.batch | → | client.batch |
index.browseObjects | → | client.browseObjects |
index.browseRules | → | client.browseRules |
index.browseSynonyms | → | client.browseSynonyms |
index.clearObjects | → | client.clearObjects |
index.clearRules | → | client.clearRules |
index.clearSynonyms | → | client.clearSynonyms |
index.copySettings | → | client.operationIndex |
index.delete | → | client.deleteIndex |
index.deleteBy | → | client.deleteBy |
index.deleteObject | → | client.deleteObject |
index.deleteObjects | → | client.deleteObjects |
index.deleteRule | → | client.deleteRule |
index.deleteSynonym | → | client.deleteSynonym |
index.exists | → | client.indexExists |
index.findObject | → | client.searchSingleIndex |
index.getObject | → | client.getObject |
index.getObjects | → | client.getObjects |
index.getRule | → | client.getRule |
index.getSettings | → | client.getSettings |
index.getSynonym | → | client.getSynonym |
index.getTask | → | client.getTask |
index.partialUpdateObject | → | client.partialUpdateObject |
index.partialUpdateObjects | → | client.partialUpdateObjects |
index.replaceAllObjects | → | client.replaceAllObjects |
index.replaceAllRules | → | client.saveRules |
index.replaceAllSynonyms | → | client.saveSynonyms |
index.saveObject | → | client.saveObject |
index.saveObjects | → | client.saveObjects |
index.saveRule | → | client.saveRule |
index.saveRules | → | client.saveRules |
index.saveSynonym | → | client.saveSynonym |
index.saveSynonyms | → | client.saveSynonyms |
index.search | → | client.searchSingleIndex |
index.searchForFacetValues | → | client.searchForFacetValues |
index.searchRules | → | client.searchRules |
index.searchSynonyms | → | client.searchSynonyms |
index.setSettings | → | client.setSettings |
index.{operation}.wait | → | client.waitForTask |
Recommend API client
| Version 3 (legacy) | Version 4 (current) | |
|---|---|---|
client.getFrequentlyBoughtTogether | → | client.getRecommendations |
client.getRecommendations | → | client.getRecommendations |
client.getRelatedProducts | → | client.getRecommendations |