lthn.io/app/Core/Search/config.php
Claude 41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00

212 lines
6.1 KiB
PHP

<?php
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
return [
/*
|--------------------------------------------------------------------------
| Search Scoring Weights
|--------------------------------------------------------------------------
|
| Configure the weights for different types of search matches.
| Higher weights = higher priority in results.
|
*/
'scoring' => [
/*
| Weight for exact query match in a field.
*/
'exact_match' => (int) env('SEARCH_WEIGHT_EXACT', 20),
/*
| Weight for query appearing at the start of a field.
*/
'starts_with' => (int) env('SEARCH_WEIGHT_STARTS_WITH', 15),
/*
| Weight for partial word matches.
*/
'word_match' => (int) env('SEARCH_WEIGHT_WORD', 5),
/*
| Weight reduction per field position.
| First field gets full weight, subsequent fields get reduced weight.
*/
'field_position_factor' => (float) env('SEARCH_FIELD_POSITION_FACTOR', 2.0),
/*
| Minimum word length to count as a match.
*/
'min_word_length' => (int) env('SEARCH_MIN_WORD_LENGTH', 2),
],
/*
|--------------------------------------------------------------------------
| Fuzzy Search Settings
|--------------------------------------------------------------------------
|
| Configure fuzzy/typo-tolerant search using Levenshtein distance.
|
*/
'fuzzy' => [
/*
| Enable fuzzy search by default.
*/
'enabled' => env('SEARCH_FUZZY_ENABLED', false),
/*
| Maximum Levenshtein distance for fuzzy matches.
| 1 = one character difference (typo tolerance)
| 2 = two character differences (more lenient)
*/
'max_distance' => (int) env('SEARCH_FUZZY_MAX_DISTANCE', 2),
/*
| Minimum query length to enable fuzzy matching.
| Short queries with fuzzy matching produce too many false positives.
*/
'min_query_length' => (int) env('SEARCH_FUZZY_MIN_LENGTH', 4),
/*
| Score multiplier for fuzzy matches (0.0 - 1.0).
| Fuzzy matches should rank lower than exact matches.
*/
'score_multiplier' => (float) env('SEARCH_FUZZY_SCORE_MULTIPLIER', 0.5),
],
/*
|--------------------------------------------------------------------------
| API Endpoints
|--------------------------------------------------------------------------
|
| Define searchable API endpoints.
|
*/
'api_endpoints' => [
// Add API endpoints here
// ['method' => 'GET', 'path' => '/api/example', 'description' => 'Example endpoint'],
],
/*
|--------------------------------------------------------------------------
| Search Suggestions / Autocomplete
|--------------------------------------------------------------------------
|
| Configure search suggestions and autocomplete behaviour.
| Provides type-ahead suggestions based on popular queries, recent
| searches, and content.
|
*/
'suggestions' => [
/*
| Enable search suggestions/autocomplete.
*/
'enabled' => env('SEARCH_SUGGESTIONS_ENABLED', true),
/*
| Maximum number of suggestions to return.
*/
'max_suggestions' => (int) env('SEARCH_SUGGESTIONS_MAX', 10),
/*
| Minimum query length to trigger suggestions.
| Shorter queries produce too many irrelevant matches.
*/
'min_query_length' => (int) env('SEARCH_SUGGESTIONS_MIN_LENGTH', 2),
/*
| Cache TTL for suggestion results in seconds.
*/
'cache_ttl' => (int) env('SEARCH_SUGGESTIONS_CACHE_TTL', 300),
/*
| Track recent searches per user/session.
| Enables personalized "recent searches" suggestions.
*/
'track_recent' => env('SEARCH_SUGGESTIONS_TRACK_RECENT', true),
/*
| Maximum recent searches to store per user.
*/
'max_recent' => (int) env('SEARCH_SUGGESTIONS_MAX_RECENT', 20),
/*
| Suggestion sources to use (in priority order).
| Available: 'popular', 'recent', 'content'
| - popular: From search analytics (most searched queries)
| - recent: User's recent searches
| - content: From searchable content titles/names
*/
'sources' => ['popular', 'recent', 'content'],
],
/*
|--------------------------------------------------------------------------
| Search Analytics
|--------------------------------------------------------------------------
|
| Configure search analytics tracking for query analysis and optimization.
| Tracks search queries, result counts, and user interactions.
|
*/
'analytics' => [
/*
| Enable search analytics tracking.
| When enabled, all search queries are logged for analysis.
*/
'enabled' => env('SEARCH_ANALYTICS_ENABLED', true),
/*
| Track clicks on search results.
| Enables click-through rate analysis and result optimization.
*/
'track_clicks' => env('SEARCH_ANALYTICS_TRACK_CLICKS', true),
/*
| Track user sessions.
| When enabled, searches and clicks are grouped by session.
| May impact privacy - disabled by default.
*/
'track_sessions' => env('SEARCH_ANALYTICS_TRACK_SESSIONS', false),
/*
| Number of days to retain analytics data.
| Old data is automatically pruned via the prune command.
| Set to 0 to disable automatic pruning.
*/
'retention_days' => (int) env('SEARCH_ANALYTICS_RETENTION_DAYS', 90),
/*
| Query patterns to exclude from tracking for privacy.
| Queries containing these strings will not be logged.
*/
'exclude_patterns' => [
'password',
'secret',
'token',
'key',
'credit',
'ssn',
],
],
];