SearchJetEngine

SDK Reference

# SDK Reference Official client libraries for integrating SearchJet Engine into your application. Each SDK handles authentication, request signing, error handling, and retries automatically. --- ## JavaScript / TypeScript SDK ### Installation ```bash npm install searchjet-connect ``` ### Initialization ```javascript import SearchJet from 'searchjet-connect'; const client = new SearchJet({ apiKey: 'sj_prv_xxxxxxxxxxxxxxxx', siteId: 'your_site_id' }); ``` ### Configuration Options | Option | Type | Required | Description | |--------|------|----------|-------------| | `apiKey` | string | Yes | Your SearchJet API key | | `siteId` | string | Yes | Default site ID for requests | | `baseUrl` | string | No | Custom base URL (default: `https://app.searchjetengine.com`) | | `timeout` | number | No | Request timeout in ms (default: 10000) | | `retries` | number | No | Auto-retry count on failure (default: 3) | ### Search ```javascript const results = await client.search('react tutorial', { page: 1, per_page: 20, sort: 'relevance', filters: { category: 'tutorials' } }); console.log(results.results); // Array of matching documents console.log(results.total); // Total number of matches console.log(results.time_ms); // Query execution time ``` ### Indexing ```javascript // Add or update a document await client.indexDocument('doc_001', { title: 'Getting Started with React', content: 'Learn the fundamentals of React...', url: '/blog/react-getting-started', tags: ['react', 'javascript', 'tutorial'] }); // Bulk index multiple documents await client.indexDocuments([ { id: 'doc_002', title: 'Advanced Hooks', content: '...', url: '/blog/hooks' }, { id: 'doc_003', title: 'State Management', content: '...', url: '/blog/state' } ]); // Remove a document await client.deleteDocument('doc_001'); ``` ### Site Management ```javascript const sites = await client.listSites(); const site = await client.getSite('site_abc123'); const updated = await client.updateSite('site_abc123', { name: 'New Name' }); await client.deleteSite('site_abc123'); ``` ### Error Handling ```javascript try { const results = await client.search('test'); } catch (error) { console.error(error.code); // 'validation_failed' console.error(error.message); // 'The q parameter is required.' console.error(error.status); // 400 } ``` --- ## Python SDK ### Installation ```bash pip install searchjet-python ``` ### Client Setup ```python from searchjet import SearchJetClient client = SearchJetClient( api_key="sj_prv_xxxxxxxxxxxxxxxx", site_id="your_site_id" ) ``` ### Configuration Options | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | `api_key` | str | Yes | — | Your API key | | `site_id` | str | Yes | — | Default site ID | | `base_url` | str | No | `https://app.searchjetengine.com` | API base URL | | `timeout` | float | No | 10.0 | Request timeout in seconds | | `max_retries` | int | No | 3 | Retry attempts on failure | ### Search ```python results = client.search( query="react tutorial", page=1, per_page=20, sort="relevance", filters={"category": "tutorials"} ) print(results["results"]) # List of matching documents print(results["total"]) # Total number of matches print(results["time_ms"]) # Query execution time ``` ### Indexing ```python # Add or update a document client.index_document( doc_id="doc_001", data={ "title": "Getting Started with React", "content": "Learn the fundamentals of React...", "url": "/blog/react-getting-started", "tags": ["react", "javascript"] } ) # Bulk index client.index_documents([ {"id": "doc_002", "title": "Advanced Hooks", "content": "..."}, {"id": "doc_003", "title": "State Management", "content": "..."} ]) # Remove a document client.delete_document("doc_001") ``` ### Site Management ```python sites = client.list_sites() site = client.get_site("site_abc123") updated = client.update_site("site_abc123", {"name": "New Name"}) client.delete_site("site_abc123") ``` ### Error Handling ```python from searchjet.exceptions import ( SearchJetError, ValidationError, UnauthorizedError, RateLimitedError ) try: results = client.search("test") except ValidationError as e: print(f"Invalid request: {e.message}") except UnauthorizedError: print("Check your API key") except RateLimitedError as e: print(f"Rate limited, retry after {e.retry_after}s") except SearchJetError as e: print(f"SearchJet error: {e}") ``` ### Using with Requests ```python import httpx from searchjet import SearchJetClient # The SDK uses httpx internally, but you can also make raw requests response = httpx.get( "https://app.searchjetengine.com/api/v1/search", params={"q": "react", "site_id": "site_abc"}, headers={"Authorization": "Bearer sj_prv_xxxxxxxxxxxxxxxx"} ) data = response.json() ``` --- ## PHP / Laravel SDK ### Installation ```bash composer require searchjet/laravel ``` ### Service Provider (Auto-registered) The package auto-discovers the service provider. Publish the config: ```bash php artisan vendor:publish --provider="SearchJet\SearchJetServiceProvider" --tag="config" ``` ### Configuration ```php // config/searchjet.php return [ 'api_key' => env('SEARCHJET_API_KEY'), 'site_id' => env('SEARCHJET_SITE_ID'), 'base_url' => env('SEARCHJET_BASE_URL', 'https://app.searchjetengine.com'), 'timeout' => env('SEARCHJET_TIMEOUT', 10), ]; ``` Set in `.env`: ``` SEARCHJET_API_KEY=sj_prv_xxxxxxxxxxxxxxxx SEARCHJET_SITE_ID=your_site_id ``` ### Facade Usage ```php use SearchJet\Facades\SearchJet; // Search $results = SearchJet::search('react tutorial', [ 'page' => 1, 'per_page' => 20, 'filters' => ['category' => 'tutorials'] ]); // Index a document SearchJet::indexDocument('doc_001', [ 'title' => 'Getting Started with React', 'content' => 'Learn the fundamentals of React...', 'url' => '/blog/react-getting-started' ]); // Bulk index SearchJet::indexDocuments([ ['id' => 'doc_002', 'title' => 'Advanced Hooks', 'content' => '...'], ['id' => 'doc_003', 'title' => 'State Management', 'content' => '...'] ]); // Delete a document SearchJet::deleteDocument('doc_001'); ``` ### Site Management ```php $sites = SearchJet::listSites(); $site = SearchJet::getSite('site_abc123'); $updated = SearchJet::updateSite('site_abc123', ['name' => 'New Name']); SearchJet::deleteSite('site_abc123'); ``` ### Error Handling ```php use SearchJet\Facades\SearchJet; use SearchJet\Exceptions\SearchJetException; use SearchJet\Exceptions\ValidationException; use SearchJet\Exceptions\RateLimitedException; try { $results = SearchJet::search('test'); } catch (ValidationException $e) { Log::warning('SearchJet validation: ' . $e->getMessage()); } catch (RateLimitedException $e) { $retryAfter = $e->getRetryAfter(); Log::info("Rate limited, retry after {$retryAfter}s"); } catch (SearchJetException $e) { Log::error('SearchJet error: ' . $e->getMessage()); } ``` ### HTTP Client (Guzzle) The Laravel SDK uses Guzzle under the hood. You can also use it directly: ```php use GuzzleHttp\Client; $client = new Client([ 'base_uri' => 'https://app.searchjetengine.com/api/v1', 'headers' => [ 'Authorization' => 'Bearer ' . config('searchjet.api_key'), 'Accept' => 'application/json' ] ]); $response = $client->get('/search', [ 'query' => ['q' => 'react', 'site_id' => config('searchjet.site_id')] ]); $data = json_decode($response->getBody(), true); ``` --- ## WordPress Plugin ### Installation 1. Download the SearchJet plugin from the WordPress plugin directory 2. Upload via **Plugins > Add New > Upload Plugin** 3. Activate the plugin 4. Navigate to **Settings > SearchJet** and enter your API key and Site ID ### Configuration | Setting | Description | |---------|-------------| | API Key | Your SearchJet API key (public key for client-side search) | | Site ID | Your site identifier in SearchJet | | Search Page | Page containing the search shortcode | | Results Per Page | Default results per page | | Enable Autocomplete | Show suggestions as users type | ### Using the Shortcode ```php // Basic search box [searchjet_search] // With placeholder text [searchjet_search placeholder="Search articles..."] // Search results page [searchjet_results] ``` ### Using in Theme ```php 'Search...', 'theme' => 'dark' ]); ?> ``` --- ## Quick Start Comparison | Platform | Install | Initialize | Search | |----------|---------|------------|--------| | JavaScript | `npm i searchjet-connect` | `new SearchJet({...})` | `client.search('query')` | | Python | `pip install searchjet-python` | `SearchJetClient(...)` | `client.search("query")` | | PHP/Laravel | `composer require searchjet/laravel` | `config('searchjet.php')` | `SearchJet::search('query')` | | WordPress | Plugin upload | Settings page | `[searchjet_search]` | --- ## See Also - [API Documentation](/docs/api-documentation) — Full API reference - [API Key Setup](/docs/api-key-setup) — Platform-specific authentication - [Error Handling](/docs/error-handling) — Error codes and handling