Sending records in batches
When sending data to Algolia, it’s best to send several records simultaneously instead of individually. It reduces network calls and speeds up indexing, especially when you have a lot of records, but everyone should send indexing operations in batches whenever possible.
For example, you might decide to send all the data from your database and end up with a million records to index. That’s too big to send all at once because Algolia limits you to 1 GB per batch per request.
In reality, sending that much data in a single network call would fail before reaching the API. You could loop over each record and send them with the
saveObjects method. The problem is that you would perform a million individual network calls, which would take way too long and saturate your Algolia cluster with indexing jobs.
A leaner approach is to split your collection of records into smaller collections, then send each chunk one by one. For optimal indexing performance, aim for a batch size of about 10 MB, representing between 1,000 and 10,000 records, depending on the average record size.
- Batching records doesn’t reduce your operations count. Algolia counts indexing operations per record, not per method call, so from a pricing perspective, batching records is the same as indexing records individually.
- Be careful when approaching your plan’s maximum number of records. If you’re close to the record limit, batch operations may fail. The error message “You have exceeded your Record quota” means the engine doesn’t know if the batch operation will update records or add new ones. If this happens, upgrade to a plan with a higher record limit or reduce your batch size.
Using the API
When using the
saveObjects method, the API client automatically chunks your records into batches of 1,000 objects.
If you want to upload large files, consider using the Algolia CLI with the
algolia objects import command.
1 2 3 4 5 6 7 $client = new \AlgoliaSearch\Client('YourApplicationID', 'YourWriteAPIKey'); $index = $client->initIndex('actors'); $records = json_decode(file_get_contents('actors.json'), true); // Batching is done automatically by the API client $index->saveObjects($records, ['autoGenerateObjectIDIfNotExist' => true]);
With this approach, you would make 100 API calls instead of 1,000,000. Depending on your records’ sizes and your network speed, you could create bigger or smaller chunks.
Using the dashboard
You can also send your records in your Algolia dashboard.
Add records manually
- Go to your dashboard, select the Data Sources icon, and then select your index.
- Click the Add records tab and select Add manually.
- Copy/paste your chunk in the JSON editor, then click Push record.
- Repeat for all your chunks.
Upload a file
- Go to your dashboard and select your index.
- Click Manage current index, then Upload file.
- Either click the file upload area to select the file where your chunk is or drag it onto the page.
- Upload starts automatically.
- Repeat for all your chunks.