Quick Start
This guide will help you get up and running with the Seekora Search SDK in minutes.
Initialize the Client
Create a new instance of SeekoraClient with your credentials:
import { SeekoraClient } from '@seekora-ai/search-sdk';
const client = new SeekoraClient({
storeId: 'your-store-id',
readSecret: 'your-read-secret',
environment: 'production', // 'local' | 'stage' | 'production'
});
Perform a Search
Use the search method to query your store:
async function performSearch() {
const results = await client.search('laptop', {
per_page: 20,
page: 1,
});
console.log(`Found ${results.totalResults} results`);
results.results.forEach((result, index) => {
console.log(`${index + 1}. ${result.title}`);
});
return results;
}
Get Query Suggestions
Implement autocomplete with query suggestions:
async function getSuggestions(query: string) {
const suggestions = await client.getSuggestions(query, {
hitsPerPage: 5,
});
console.log('Suggestions:', suggestions);
return suggestions;
}
Track Events
Track user interactions for analytics:
async function searchAndTrack() {
// Perform search
const results = await client.search('laptop');
// User clicks on the first result
const clickedItem = results.results[0];
await client.trackClick(clickedItem.id, 1, results.context);
// User views the product
await client.trackView(clickedItem.id, results.context);
// User makes a purchase
await client.trackConversion(clickedItem.id, 999.99, 'USD', results.context);
}
Complete Example
Here's a complete example combining search, suggestions, and analytics:
import { SeekoraClient } from '@seekora-ai/search-sdk';
const client = new SeekoraClient({
storeId: 'your-store-id',
readSecret: 'your-read-secret',
environment: 'production',
});
// Search with filters and facets
async function searchProducts(query: string) {
const results = await client.search(query, {
per_page: 20,
filter_by: 'category:Electronics',
facet_by: 'brand,price_range',
sort_by: 'relevance:desc',
});
// Display results
console.log(`Found ${results.totalResults} products`);
// Display facets
if (results.facets) {
Object.entries(results.facets).forEach(([field, facet]) => {
console.log(`${field}:`, facet.counts);
});
}
return results;
}
// Autocomplete
async function handleTyping(partialQuery: string) {
if (partialQuery.length < 2) return [];
const suggestions = await client.getSuggestions(partialQuery, {
hitsPerPage: 10,
});
return suggestions;
}
// Track user journey
async function trackUserJourney(results: any) {
const selectedProduct = results.results[0];
// Track click
await client.trackClick(selectedProduct.id, 1, results.context);
// Track conversion
await client.trackConversion(
selectedProduct.id,
selectedProduct.price,
'USD',
results.context
);
}
// Run
searchProducts('laptop').then(trackUserJourney);
Error Handling
Always wrap SDK calls in try-catch blocks:
async function safeSearch(query: string) {
try {
const results = await client.search(query);
return results;
} catch (error) {
console.error('Search failed:', error.message);
// Handle specific error types
if (error.message.includes('401') || error.message.includes('403')) {
console.error('Authentication error - check your credentials');
} else if (error.message.includes('429')) {
console.error('Rate limit exceeded - retry later');
} else if (error.message.includes('Network error')) {
console.error('Network issue - check your connection');
}
throw error;
}
}
Next Steps
- Search API - Explore advanced search options
- Query Suggestions - Implement rich autocomplete
- Analytics - Track user behavior
- Configuration - Customize SDK behavior