API Reference / API Methods / Java API client FAQ

Java API client FAQ

Why am I getting “Impossible to connect”, “Unable to connect”, or “Unreachable hosts” errors?

If you’re facing connectivity issues, here are some checks you should perform on your side before contacting our support team:

  • Are you using the correct application ID and API key? You can find these credentials on your Algolia dashboard.
  • Did anything recently change in your code or on your data center provider’s side? Make sure to check their status too.
  • Using Firebase? The Firebase free plan only allows requests to other Google APIs. Because of this limitation, you can only use Algolia with Firebase if you’re on a paid Firebase tier.

If you’re unable to debug the problem yourself, please contact support@algolia.com with the following information:

  • API client and version (e.g., JavaScript API client 4.3.0)
  • Language and version (e.g., PHP 7.1)
  • Code snippet to reproduce the issue
  • Error message or stack trace (if applicable)
  • The Algolia index name with which you’re experiencing issues
  • The precise timeline (in the UTC time zone of the event)
  • Having trouble connecting to the Algolia API from your servers? Send us the link generated by the diagnostic script command on your impacted servers:
    1
    
    curl -sL https://algolia.com/downloads/diag.sh > ./diag.sh && sudo ./diag.sh ApplicationID
    

    Ensure that you replace “ApplicationID” with your actual Algolia Application ID.

  • Having trouble connecting to the Algolia API from your browser? Head over to community.algolia.com/diag/ and send us this output instead.

How can I stay up-to-date with new major versions of the API clients?

You can check out our changelog page.

Why am I getting the “Record at the position XX objectID=XX is too big” error?

You’re getting this error because there’s a size limit for records. Make sure you reduce your records and try again.

Why can’t I find the object with the findObject method?

If you need to get an object from your index, you should use the getObjects method.

You should only use findObject to debug the relevance of a specific object, and in development mode. This method accepts a condition and returns the first matching object along with its position information in the result set. Note that the result set is limited to a certain amount of records, not the entire index.

Why can’t I use the generateSecuredApiKey method without restrictions?

You must add at least one restriction to generate a valid secured API key. If there are no restrictions, there’s no point in hiding the original API key since the generated secured API key has the same permissions and constraints.

You can find the list of possible restrictions.

Why does the replaceAllObjects method hang forever?

When an index doesn’t exist, and you’re using the replaceAllObjects with the safe parameter, the method can get stuck and hang forever. This happens because the method expects the index to exist.

To fix this issue, you can either create the index using the Algolia dashboard, or with the API using an empty setSettings.

Why doesn’t replaceAllObjects replace all the objects and leave a temporary index?

If you’ve performed replaceAllObjects, it may still be in progress. If you suspect that the operation didn’t complete successfully and left a temporary index, make sure to double-check the number of records of the temporary index.

If the number of records of the temporary index doesn’t change for 10 minutes, there’s a chance the operation didn’t finish because of an error while indexing records in the temporary index. To debug this, we recommend you check the logs in your Algolia dashboard for the temporary index and see if you find any errors.

Besides, you may also be able to debug the issue in your development console or logging platform.

If you’re unable to debug the problem yourself, please contact support@algolia.com with the following information:

  • API client and version (e.g., Go client 3.4.0)
  • Language and version (e.g., Java 1.8)
  • Code snippet to reproduce the issue
  • Error message or stack trace (if applicable)
  • The Algolia index name with which you’re experiencing issues
  • The precise timeline (in the UTC time zone of the event)

When using replaceAllObjects, why does the destination index contains fewer records than expected?

This issue may happen when indexing a large number of records, and because of the asynchronous nature of Algolia. You can fix this issue with the safe parameter.

If you need to index many records, you may want to process replaceAllObjects in the background, as the safe parameter may cause the operation to take longer than expected.

How to delete objects without their objectIDs?

The most convenient way is to use the deleteBy method, as it enables you to delete one or more objects based on filters (numeric, facet, tag or geo queries).

How can I log Algolia’s requests and responses?

For debugging purposes, you may need to log Algolia requests and responses. To do so, you can set the following values within the logging.properties file of your Java project:

1
2
3
4
5
6
handlers=java.util.logging.FileHandler
.level=FINEST
java.util.logging.FileHandler.pattern=algolia-http.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level=FINEST
com.algolia.search.HttpTransport=FINEST

If you don’t already have a logging.properties file, you can create one anywhere in your project and start your project with the -Djava.util.logging.config.file=/absolute/path/to/your/logging.properties command-line option.

Why do I get intermittent “An existing connection was forcibly closed by the remote” errors?

One of the possible reasons is that the Algolia server closed the HTTP connection. This sometimes happens when the JVM can’t open new network connections locally.

To address this, we’ve opened the configuration of the Algolia Java client, which you can instantiate like the following:

1
2
3
4
5
6
7
8
SearchConfig config = new SearchConfig.Builder("YourApplicationID", "YourAdminAPIKey").build();
HttpAsyncClientBuilder builder = HttpAsyncClientBuilder.create();

builder.setMaxConnPerRoute(1);
builder.setMaxConnTotal(1);

SearchClient client = new SearchClient(config, new ApacheHttpRequester(config, builder));
SearchIndex index = client.initIndex("YourIndexName");

You can change any part of the Apache HTTP client configuration thanks to the builder instance. The maxConnPerRoute and maxConnTotal set to 1 ensure, for instance, that the HTTP client doesn’t try to open more than one connection on your machine. This can be useful if you have a limited number of possible connections.

If this solves the issue, you may want to increase the numbers afterwards, depending on your configuration.

I don’t use Maven, where can I directly download your Java libraries?

We publish all our Java libraries to Maven Central on Sonatype servers. All our modules are available for direct download at the following addresses:

Browse to the most recent version directory. From there, you can find all our artifacts, including the algoliasearch-FLAVOR.X.Y.Z.jar where FLAVOR corresponds to the selected flavor, and X.Y.Z to the version of your choice.

Did you find this page helpful?