"Create a minimal working Algolia example \u2014 index records and search\
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill algolia-hello-world --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Algolia Hello World?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-algolia-hello-world-tons-of-skills-marketplace)More formats (shields.io, HTML) on the badges page.
---
name: algolia-hello-world
description: "Create a minimal working Algolia example \u2014 index records and search\
\ them.\nUse when starting a new Algolia integration, testing your setup,\nor learning\
\ the saveObjects/searchSingleIndex pattern.\nTrigger: \"algolia hello world\",\
\ \"algolia example\", \"algolia quick start\", \"first algolia search\".\n"
allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(node:*), Bash(npx:*)
version: 1.7.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- search
- algolia
compatibility: Designed for Claude Code
---
# 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
```typescript
import { algoliasearch } from 'algoliasearch';
const client = algoliasearch(
process.env.ALGOLIA_APP_ID!,
process.env.ALGOLIA_ADMIN_KEY!
);
// saveObjects adds or replaces records. Each must have objectID
// (or Algolia auto-generates one).
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' },
],
});
// Wait for indexing to complete before searching
await client.waitForTask({ indexName: 'movies', taskID });
console.log('Indexing complete.');
```
### Step 2: Search with searchSingleIndex
```typescript
// Basic search — Algolia searches all searchableAttributes by default
const { hits } = await client.searchSingleIndex({
indexName: 'movies',
searchParams: { query: 'matrix' },
});
console.log(`Found ${hits.length} results:`);
hits.forEach(hit => {
// _highlightResult shows which parts matched
console.log(` ${hit.title} (${hit.year})`);
});
```
### Step 3: Configure Index Settings
```typescript
// Settings define how Algolia ranks results
await client.setSettings({
indexName: 'movies',
indexSettings: {
searchableAttributes: ['title', 'genre'], // Fields to search
attributesForFaceting: ['genre', 'year'], // Filterable fields
customRanking: ['desc(year)'], // Tie-breaker: newer first
attributesToRetrieve: ['title', 'year', 'genre'],// Fields returned in hits
},
});
```
## 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)
```typescript
// Search multiple indices in one API call
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)
```typescript
// browse returns up to 1000 records per call — use for data export
const { hits, cursor } = await client.browse({
indexName: 'movies',
browseParams: { hitsPerPage: 1000 },
});
console.log(`First page: ${hits.length} records`);
// Use cursor to fetch next pages
```
### Delete Records
```typescript
// Delete by objectID
await client.deleteObject({ indexName: 'movies', objectID: '3' });
// Delete by query match
await client.deleteBy({
indexName: 'movies',
deleteByParams: { filters: 'genre:crime' },
});
```
## Resources
- [saveObjects Reference](https://www.algolia.com/doc/libraries/javascript/v5/methods/search/save-object/)
- [searchSingleIndex Reference](https://www.algolia.com/doc/libraries/javascript/v5/methods/search/search-single-index/)
- [Index Settings](https://www.algolia.com/doc/api-reference/api-methods/set-settings/)
- [Algolia Quick Start](https://www.algolia.com/doc/guides/getting-started/quick-start/)
## Next Steps
Proceed to `algolia-local-dev-loop` for development workflow setup.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!