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