SearchService
in package
Standalone Elasticsearch search service for Heratio.
Queries ES directly via curl HTTP. No Symfony or PHP client dependency. Falls back to database LIKE queries if ES is unavailable.
Usage: $results = SearchService::search('pottery', ['type' => 'archive']); $results = SearchService::autocomplete('pot', 'informationobject'); $results = SearchService::browse([ 'type' => 'archive', 'facets' => ['level', 'creator', 'subject'], 'filters' => ['level' => 'File'], 'sort' => 'relevance', 'page' => 1, 'limit' => 30, ]);
Table of Contents
Methods
- autocomplete() : array<string|int, mixed>
- Autocomplete search (fast, edge-ngram).
- browse() : array<string|int, mixed>
- Browse with faceted navigation (for GLAM display).
- configure() : void
- Override configuration programmatically (for testing or standalone use).
- getConnectionInfo() : array<string|int, mixed>
- Get configured ES host info (for diagnostics).
- isAvailable() : bool
- Check if ES is available.
- reset() : void
- Reset cached config (for testing).
- search() : array<string|int, mixed>
- Full-text search with facets and filters.
- searchFallback() : array<string|int, mixed>
- Fallback search using database LIKE queries when ES is unavailable.
Methods
autocomplete()
Autocomplete search (fast, edge-ngram).
public
static autocomplete(string $prefix[, string $entityType = 'informationobject' ][, string $culture = 'en' ][, int $limit = 10 ]) : array<string|int, mixed>
Returns: [['id'=>1, 'slug'=>'x', 'title'=>'y'], ...]
Parameters
- $prefix : string
- $entityType : string = 'informationobject'
- $culture : string = 'en'
- $limit : int = 10
Return values
array<string|int, mixed>browse()
Browse with faceted navigation (for GLAM display).
public
static browse([array<string|int, mixed> $options = [] ]) : array<string|int, mixed>
Returns same structure as search() but may use match_all for empty query.
Parameters
- $options : array<string|int, mixed> = []
Return values
array<string|int, mixed>configure()
Override configuration programmatically (for testing or standalone use).
public
static configure(string $host, int $port, string $indexPrefix) : void
Parameters
- $host : string
- $port : int
- $indexPrefix : string
getConnectionInfo()
Get configured ES host info (for diagnostics).
public
static getConnectionInfo() : array<string|int, mixed>
Return values
array<string|int, mixed>isAvailable()
Check if ES is available.
public
static isAvailable() : bool
Return values
boolreset()
Reset cached config (for testing).
public
static reset() : void
search()
Full-text search with facets and filters.
public
static search(string $query[, array<string|int, mixed> $options = [] ]) : array<string|int, mixed>
Options: 'entityType' => 'informationobject' (default) 'culture' => 'en' 'filters' => ['level' => 123, 'creator' => 'John', ...] 'facets' => ['level', 'creator', 'subject', 'place', 'media_type', 'repository'] 'sort' => 'relevance'|'title_asc'|'title_desc'|'date_asc'|'date_desc'|'updated'|'identifier' 'page' => 1 'limit' => 30 'publicationStatus' => 'published' (default) | 'draft' | 'all' '_match_all' => true (internal, set by browse())
Returns: [ 'hits' => [['id'=>1, 'slug'=>'x', 'title'=>'y', '_score'=>1.5], ...], 'total' => 150, 'facets' => ['level' => ['File'=>30, 'Item'=>20], ...], 'page' => 1, 'limit' => 30, ]
Parameters
- $query : string
- $options : array<string|int, mixed> = []
Return values
array<string|int, mixed>searchFallback()
Fallback search using database LIKE queries when ES is unavailable.
public
static searchFallback(string $query[, string $entityType = 'informationobject' ][, string $culture = 'en' ][, int $page = 1 ][, int $limit = 30 ]) : array<string|int, mixed>
Parameters
- $query : string
- $entityType : string = 'informationobject'
- $culture : string = 'en'
- $page : int = 1
- $limit : int = 30