Algolia Hello World
Overview
Index records into Algolia and search them back — the two fundamental operations. Uses the algoliasearch v5 client where all methods live on the client directly (no initIndex).
Prerequisites
algoliasearch v5 installed (npm install algoliasearch)
ALGOLIA_APP_ID and ALGOLIA_ADMIN_KEY environment variables set
- See
algolia-install-auth for setup
Instructions
Step 1: Index Records with saveObjects
import { algoliasearch } from 'algoliasearch';
const client = algoliasearch(
process.env.ALGOLIA_APP_ID!,
process.env.ALGOLIA_ADMIN_KEY!
);
const { taskID } = await client.saveObjects({
indexName: 'movies',
objects: [
{ objectID: '1', title: 'The Matrix', year: 1999, genre: 'sci-fi' },
{ objectID: '2', title: 'Inception', year: 2010, genre: 'sci-fi' },
{ objectID: '3', title: 'Pulp Fiction', year: 1994, genre: 'crime' },
],
});
await client.waitForTask({ indexName: 'movies', taskID });
console.log('Indexing complete.');
Step 2: Search with searchSingleIndex
const { hits } = await client.searchSingleIndex({
indexName: 'movies',
searchParams: { query: 'matrix' },
});
console.log(`Found ${hits.length} results:`);
hits.forEach(hit => {
console.log(` ${hit.title} (${hit.year})`);
});
Step 3: Configure Index Settings
await client.setSettings({
indexName: 'movies',
indexSettings: {
searchableAttributes: ['title', 'genre'],
attributesForFaceting: ['genre', 'year'],
customRanking: ['desc(year)'],
attributesToRetrieve: ['title', 'year', 'genre'],
},
});
Output
Indexing complete.
Found 1 results:
The Matrix (1999)
Error Handling
| Error | Cause | Solution |
|---|
Invalid Application-ID or API key | Wrong credentials | Verify in dashboard > Settings > API Keys |
Record is too big | Object > 10KB (free) or 100KB (paid) | Reduce record size or split into smaller records |
Index does not exist (on search) | Index not created yet | saveObjects auto-creates the index |
taskID never resolves | Indexing queue backlog | Check dashboard > Indices > Operations |
Examples
Multi-Index Search (federated)
const { results } = await client.search({
requests: [
{ indexName: 'movies', query: 'inception' },
{ indexName: 'actors', query: 'inception' },
],
});
results.forEach(result => {
if ('hits' in result) {
console.log(`${result.index}: ${result.hits.length} hits`);
}
});
Browse All Records (no query, iterate everything)
const { hits, cursor } = await client.browse({
indexName: 'movies',
browseParams: { hitsPerPage: 1000 },
});
console.log(`First page: ${hits.length} records`);
Delete Records
await client.deleteObject({ indexName: 'movies', objectID: '3' });
await client.deleteBy({
indexName: 'movies',
deleteByParams: { filters: 'genre:crime' },
});
Resources
Next Steps
Proceed to algolia-local-dev-loop for development workflow setup.