micka-17/typesense-bundle

Un bundle Symfony pour intégrer Typesense.

Installs: 21

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Language:CSS

Type:symfony-bundle

v1.0.0-alpha.1 2025-07-03 14:22 UTC

This package is not auto-updated.

Last update: 2025-07-16 10:57:40 UTC


README

Ce bundle facilite l'intégration de Typesense dans vos applications Symfony. Il permet d'indexer automatiquement vos entités Doctrine dans Typesense et de gérer les opérations de recherche.

Installation

composer require micka-17/typesense-bundle

Configuration

typesense:
    api_key: '%env(TYPENSE_API_KEY)%'
    nodes:
        - host: '%env(TYPENSE_HOST)%'
          port: '%env(TYPENSE_PORT)%'
          protocol: '%env(TYPENSE_PROTOCOL)%'
    
    indexable_entities:
        - App\Entity\Product
        - App\Entity\Category

    synonyms:
        - { id: 'size-synonyms', synonyms: ['large', 'big', 'huge'] }
        - { id: 'color-synonyms', root: 'primary_color', synonyms: ['red', 'blue', 'green'] }
    
    auto_update: true

Utilisation

Indexation des Entités

#[TypesenseIndexable(collection: 'products')]
#[TypesenseSynonym(id: 'product-synonyms', synonyms: ['item', 'good', 'merchandise'])]
class Product
{
    #[TypesenseField(
        name: 'name',
        type: 'string',
        facet: true,
        sort: true
    )]
    private string $name;
}

Recherche

Le service FinderService vous permet d'effectuer des recherches simples, paginées ou sur plusieurs collections.

use Micka17\TypesenseBundle\Service\FinderService;

class YourService
{
    public function __construct(private FinderService $finderService) {}

    public function searchProducts(string $query)
    {
        return $this->finderService->search('products', ['q' => $query]);
    }

    public function searchProductsPaginated(string $query, int $page = 1)
    {
        return $this->finderService->searchAndPaginate('products', ['q' => $query], $page, 15);
    }

    public function searchMulti(string $query)
    {
        $searchRequests = [
            'searches' => [
                ['collection' => 'products', 'q' => $query],
                ['collection' => 'categories', 'q' => $query],
            ]
        ];

        return $this->finderService->multiSearch($searchRequests);
    }
}

Commandes

# Créer une collection
php bin/console micka17:typesense:manage create "App\Entity\Product"

# Recréer une collection
php bin/console micka17:typesense:manage recreate "App\Entity\Product"

# Re-indexer une collection
php bin/console micka17:typesense:manage reindex "App\Entity\Product"

# Supprimer une collection
php bin/console micka17:typesense:manage delete "App\Entity\Product"

# Gérer les synonymes
php bin/console micka17:typesense:synonyms <action> <synonym-id> <synonyms> --collection=<collection>

# Appliquer les synonymes depuis la configuration et les attributs
php bin/console micka17:typesense:synonyms:apply

Documentation Complète

Pour plus de détails sur la configuration et l'utilisation, consultez la documentation complète.

Contribuer

Les contributions sont les bienvenues ! N'hésitez pas à créer des issues ou des pull requests.

Support

Pour toute question ou problème, ouvrez une issue sur le repository GitHub du projet.

License

Ce bundle est distribué sous la licence MIT.