Sphinx Search Engine + Symfony

Kontynuując poprzedni artykuł, przebrniemy przez proces instalacji i integracji Sphinxa z Symfony pod Windowsem. Jeśli chcesz wiedzieć, co wydarzyło się ostatnio, koniecznie zajrzyj tutaj

Instalacja Sphinxa

Najpierw musimy zainstalować silnik. Można go pobrać z oficjalnej strony.

Konfiguracja Sphinxa

W składnikach zainstalowanego silnika posiadamy pliki między innymi sphinx.conf.in, który przedstawia przykład konfiguracji indeksów. Można skonfigurować na jego podstawie lub tworzyć nowy sphinx.conf. Plik zawiera informacje o tym co indeksować oraz informacje o samym daemonie sphinxa.

Struktura

  • source – jest to źródło danych na których podstawie sphinx oblicza swoje indeksy.
  • index – informacje o samym indeksie, jego parametry, gdzie ma zostać zapisany oraz źródło danych
  • indexer – konfiguracja indexera,
  • searchd – konfiguracja daemona

    { type = mysql sql_host = localhost sql_user = db_user sql_pass = db_password sql_db = nazwa_bazy sql_port = 3306

    sql_query = SELECT id as ‚id’, name, description, ‚product’ as ‚index_name’ FROM product sql_attr_string = index_name

    }

    index product { source = productIndex path = C:/Sphinx/data/product min_infix_len = 3 expand_keywords = 1 }

    indexer { mem_limit = 128M }

    searchd { listen = 9312 listen = 9306:mysql41 log = C:/Sphinx/log/searchd.log query_log = C:/Sphinx/log/query.log read_timeout = 5 max_children = 30 pid_file = C:/Sphinx/log/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads # for RT to work binlog_path = C:/Sphinx/data

    }

Stworzyliśmy tutaj index na rekord z tabeli product, wyciągamy dane (stringi) z kolumn ‘name’ oraz ‘description’. Nasz index nazywa się ‘product’. Dane o nim zostaną zapisane w C:/Sphinx/data w plikach z prefixem ‘product’. Następnie aby stworzyć taki index fizycznie, odpalamy konsolę, wchodzimy do lokalizacji zainstalowanego Sphinxa (C:\Sphinx) oraz odpalamy bin\indexer --rotate –all. Jeżeli nie pojawiają się błędy, sprawdzamy czy w katalogu data stworzyliśmy poprawnie indeksy. Następnie aby mieć do nich dostęp musimy włączyć sam silnik komendą bin\searchd –config sphinx.conf (plik sphinx.conf znajduje się dokładnie tu gdzie my w konsoli, jeśli jest w innym miejscu, tutaj ścieżka).

Konfiguracja Symfony

  1. Instalacja AkumaI\SphinxsearchBundle\SphinxsearchBundle;
  2. Instalujemy Bundle do obsługi Sphinxa;
  3. Do config.yml naszej aplikacji dopisujemy:

    sphinxsearch: searchd: host: localhost port: 9312 indexes: product: „AppBundle:Product”

W tym momencie daliśmy do zrozumienia naszej aplikacji że rekordy znalezione pod indexem ‘product’ będą obiektami klasy Product z AppBundle.

Wyszukiwanie

Nasza metoda w kontrolerze:

/**
   * @Route("/search")
   */
  public function searchAction(Request $request)
  {   
        $q = $request->get('q'); 

    $results =  $this->sphinx->searchEx($q, array(‘product’));

[….]
  }

Voila!

FacebookTwitterGoogle+LinkedIn