PHPackages                             andydefer/laravel-fuzzy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. andydefer/laravel-fuzzy

ActiveLibrary[Search &amp; Filtering](/categories/search)

andydefer/laravel-fuzzy
=======================

Powerful fuzzy search system for Laravel with database indexing

0.15.4(3mo ago)038MITPHPPHP ^8.2

Since Jan 9Pushed 3mo agoCompare

[ Source](https://github.com/andydefer/laravel-fuzzy)[ Packagist](https://packagist.org/packages/andydefer/laravel-fuzzy)[ RSS](/packages/andydefer-laravel-fuzzy/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (12)Versions (35)Used By (0)

Voici votre fichier README.md corrigé et complet :

Laravel Fuzzy Search
====================

[](#laravel-fuzzy-search)

[![Latest Version on Packagist](https://camo.githubusercontent.com/31a9c3e8bfec7616423c3399e1ee826c0523e51606c0d13f1a9931d39345658c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f616e647964656665722f6c61726176656c2d66757a7a792e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/andydefer/laravel-fuzzy)[![License](https://camo.githubusercontent.com/370b91a2bb70b621a46d857ab3ccc90f0c70099042b02533054f8e3d6e8a6daf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f616e647964656665722f6c61726176656c2d66757a7a792e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/andydefer/laravel-fuzzy)

Un package Laravel puissant de recherche floue (fuzzy search) avec indexation basée sur la base de données et système de scoring avancé. Supporte les fautes de frappe, les recherches approximatives et les recherches multi-mots avec performances optimisées.

**Problème résolu** : Implémente une recherche floue performante directement dans votre base de données Laravel sans dépendre de services externes coûteux comme Algolia ou Meilisearch. Gère automatiquement les fautes de frappe, les variations orthographiques et optimise les performances pour les grandes bases de données.

📦 Installation
--------------

[](#-installation)

### Prérequis

[](#prérequis)

- PHP ^8.2
- Laravel ^11.0
- MySQL 5.7+ ou PostgreSQL 9.6+

### Installation via Composer

[](#installation-via-composer)

```
composer require andydefer/laravel-fuzzy
```

### Publier les fichiers de configuration et migrations

[](#publier-les-fichiers-de-configuration-et-migrations)

```
php artisan vendor:publish --provider="Fuzzy\FuzzySearchServiceProvider"
```

### Exécuter les migrations

[](#exécuter-les-migrations)

```
php artisan migrate
```

⚙️ Configuration
----------------

[](#️-configuration)

Après avoir publié la configuration, éditez `config/fuzzy.php` :

```
return [
    // Auto-découverte des modèles dans app/Models/
    'auto_discovery' => [
        'enabled' => true,
        'directories' => [
            app_path('Models'),
        ],
        'exclude_patterns' => [
            '/^Abstract/',
            '/^Base/',
            '/Interface$/',
            '/Trait$/',
        ],
    ],

    // Modèles explicitement configurés
    'searchable_models' => [
        App\Models\User::class,
        App\Models\Product::class,
        // Ajoutez vos modèles ici
    ],

    // Configuration du cache (optimisation performances)
    'cache' => [
        'enabled' => true,
        'prefix' => 'fuzzy_search:',
        'ttl' => [
            'search' => 3600, // 1 heure
            'search_in_model' => 3600,
            'search_in_models' => 3600,
            'stats' => 30,    // 30 secondes
        ],
        'invalidation' => [
            'on_index' => true,
            'on_update' => true,
            'on_delete' => true,
        ],
    ],

    // Options de recherche par défaut
    'default_options' => [
        'min_score' => 0.1,    // Score minimum pour inclure un résultat
        'max_results' => 20,   // Limite de résultats
        'fuzzy' => true,       // Activer la recherche floue
        'threshold' => 0.3,    // Seuil de similarité
    ],

    // Configuration du pipeline de recherche (NON MODIFIABLE)
    'pipeline' => [
        'stages' => [
            \Fuzzy\Stages\NormalizeQueryStage::class,
            \Fuzzy\Stages\MatchDiscoveryStage::class,
            \Fuzzy\Stages\ScoringStage::class,
            \Fuzzy\Stages\RelevanceScoringStage::class,
            \Fuzzy\Stages\SortAndLimitStage::class,
        ],
    ],

    // Système de scoring avancé
    'scoring' => [
        'field_weights' => [
            'name' => 1.3,        // 30% de bonus pour le champ 'name'
            'title' => 1.2,       // 20% de bonus
            'email' => 1.0,
            'description' => 0.8, // 20% de pénalité
            'content' => 0.7,
            'default' => 0.6,
        ],
        'bonuses' => [
            'full_coverage' => 0.3,     // Bonus si tous les mots sont trouvés
            'high_coverage' => 0.15,    // Bonus si >75% des mots trouvés
            'early_position' => 0.2,    // Bonus si mot au début du champ
        ],
        'penalties' => [
            'short_query' => 0.4,       // Pénalité pour requêtes courtes ( 0.3,
        ],
        'consecutive_bonus' => [        // NON MODIFIABLE - Configuration protégée
            2 => 1.05,
            3 => 1.15,
            4 => 1.30,
            5 => 1.50,
        ],
    ],

    // Pré-chargement des relations pour éviter les requêtes N+1
    'eager_load' => [
        // Exemple:
        // App\Models\User::class => ['profile', 'roles'],
        // App\Models\Product::class => ['category', 'brand'],
    ],

    // Mots ignorés dans les requêtes longues (>3 mots)
    'stop_words' => [
        'the', 'and', 'or', 'a', 'an', 'in', 'on', 'at', 'to',
        // Ajoutez vos propres stop words
    ],

    // Configuration de l'indexation
    'index' => [
        'min_word_length' => 2,
        'max_word_length' => 50,
        'batch_size' => 100,
        'queue' => env('FUZZY_SEARCH_QUEUE', false),
        'queue_name' => env('FUZZY_SEARCH_QUEUE_NAME', 'default'),
    ],

    // Configuration des algorithmes de similarité
    'similarity' => [
        'min_query_length' => 2,
        'min_similarity_threshold' => 0.1,
        'algorithm_weights' => [
            'jaro_winkler' => 0.4,
            'levenshtein' => 0.3,
            'ngrams' => 0.2,
            'lcs' => 0.1,
        ],
    ],
];
```

🚀 Utilisation Rapide
--------------------

[](#-utilisation-rapide)

### 1. Préparer votre modèle

[](#1-préparer-votre-modèle)

```
