mercredi 18 janvier 2012

Utilisation de Sphinx avec Symphony 2

Pour utiliser Sphinx avec Symfony 2, il suffit simplement de créer un service qui permettra d'accéder au client sphinx fourni dans la distribution (répertoire API). Il faut donc:
  1. créer un répertoire vendor/sphinx-client/api/Sphinx dans votre projet symfony
  2. copier le fichier api/sphinxapi.php de la distribution sphinx vers vendor/sphinx-client/api/Sphinx/SphinxClient.php
  3. dans le fichier SphinxClient.php, ajoutez namespace Sphinx; en début de fichier
  4. toujours dans SphinxClient.php, dans la méthode SetServer commentez la ligne assert ( is_int($port) );

Voilà les élements sont placés comme il faut. Maintenant il faut les référencer dans symfony:




$loader->registerPrefixes(array(
   // ...
   'Sphinx'           => __DIR__.'/../vendor/sphinx-client/api',
  ));

dans le fichier app/config/config.yml




services:
     search:
         class: Sphinx/SphinxClient
         calls:
             - [SetArrayResult, [true]]
             - [SetLimits, [0, 20, 1000]]
             - [SetServer, [%sphinx_host%,%sphinx_port%]]
et pour terminer dans le fichier app/config/parameters.ini




    sphinx_host       = localhost
    sphinx_port       = 9132
Il suffit maintenant, dans un de vos controleurs, de récupérer et utiliser le service comme suit:




$search  = $this->get('search'); // récupérer le service
$results = $search->Query(...);  // l'utiliser


Et voilà !

2 commentaires:

  1. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  2. Hi,
    I try to use sphinx in symfony2, i found this tutorial so i folowed the steps but finally i got this error

    Fatal error: Class 'sphinx\SphinxClient' not found in /var/www/mywebsite.com/app/cache/prod/appProdDebugProjectContainer.php on line 1623

    this is the sphinx service in config.yml :

    services:
    twig.extension.text:
    class: Twig_Extensions_Extension_Text
    tags:
    - { name: twig.extension }
    search:
    class: sphinx\SphinxClient
    calls:
    - [SetArrayResult, [true]]
    - [SetLimits, [0, 20, 1000]]
    - [SetServer, [%sphinx_host%,%sphinx_port%]]


    and this is what i add in autoload:

    'sphinx' => __DIR__.'/../vendor/sphinxclient/api/sphinx'

    I add also the namespace in SphinxClient class like this: namespace sphinx;

    can you help me to find the problem please.

    thanks in advance.

    RépondreSupprimer