tagsearch/php-engine

There is no license information available for the latest version (v1.0.0) of this package.

In-memory tag search engine for e-commerce (DAWG + BM25 + hybrid ranking)

Maintainers

Package info

github.com/Gillesto66/php-e-cormmerce-search

pkg:composer/tagsearch/php-engine

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-04-10 08:04 UTC

This package is not auto-updated.

Last update: 2026-04-25 06:31:48 UTC


README

In-memory tag search engine for e-commerce. PHP 8.2+, Laravel-ready.

Installation

composer install

Quick Start

use TagSearch\SearchEngine;
use TagSearch\SearchPreferences;
use TagSearch\ProductType;

$engine = new SearchEngine(cacheSize: 200);
$engine->loadCatalog(__DIR__ . '/../shared-assets/catalog.json');

// Recherche simple
$result = $engine->search('gaming');
// $result['results'] = [...], $result['status'] = 'CALCULÉ'

// Avec préférences
$prefs  = new SearchPreferences(preferredType: ProductType::DIGITAL, maxPrice: 50.0);
$result = $engine->search('cuisine', prefs: $prefs, fuzzy: false);

Intégration Laravel

Dans AppServiceProvider::register() :

$this->app->singleton(SearchEngine::class, function () {
    $engine = new SearchEngine(cacheSize: 500);
    $engine->loadCatalog(storage_path('app/catalog.json'));
    return $engine;
});

Puis dans un contrôleur :

public function search(Request $request, SearchEngine $engine): JsonResponse {
    $results = $engine->search($request->string('q'));
    return response()->json($results);
}

API

SearchEngine::search(string $query, ?SearchPreferences $prefs, bool $fuzzy, int $maxDist, int $topK)

Retourne array{results: array[], status: string}status'CALCULÉ' | 'CACHÉ' | 'MISS'.

Tests

./vendor/bin/phpunit tests/

Note sur le DAWG en PHP

PHP n'a pas d'implémentation native de DAWG. Le moteur utilise levenshtein() natif (C) pour la recherche floue et str_starts_with() pour l'autocomplétion. Pour un corpus > 100k tags, envisager une extension C ou un service dédié (Meilisearch).