RkBlog

Hardware, programming and astronomy tutorials and reviews.

Pełnotekstowe wyszukiwanie w PHP z wykorzystaniem Sphinxa

W Bibliotece Pythona, w artykule Pełnotekstowa wyszukiwarka Sphinx opisałem wyszukiwarkę Sphinx służącą do wydajnego wyszukiwania dokumentów. Zaletą tej aplikacji jest obsługa danych zawartych w bazach danych MySQL i PostgreSQL. Pełnotekstowe wyszukiwanie za pomocą Sphinxa jest znacznie wydajniejsze od odpowiednika dostępnego w bazie MySQL.

Sphinx posiada także bibliotekę dla języka PHP. Wystarczy pobrać paczkę źródłową i rozpakować. W katalogu api znajdziemy plik sphinxapi.php, który wystarczy skopiować do katalogu dostępnego dla serwera (np. katalog ze skryptem). Jeżeli dysponujemy własnym serwerem i mamy możliwość instalowania binarnych rozszerzeń, to możemy użyć PECL Sphinx - binarnego API, zgodnego z tym dostępnych razem ze Sphinxem. Binarne rozszerzenie z natury będzie szybsze od kodu PHP (oczywiście nie dotyczy to szybkości wykonywania wyszukiwań).

Sphinx i PHP

Dla tej samej struktury bazy danych i konfiguracji Sphinxa, co przedstawionej w artykule Pełnotekstowa wyszukiwarka Sphinx skrypt wykonujący wyszukanie wyglądałby następująco:
<?php
include('sphinxapi.php');

  $cl = new SphinxClient();
  $cl->SetServer( "localhost", 3312 );
  $cl->SetMatchMode( SPH_MATCH_ANY  );

  $result = $cl->Query( 'bmw' );

  if ( $result === false ) {
      echo "Query failed: " . $cl->GetLastError() . ".
";
  }
  else {
      if ( $cl->GetLastWarning() ) {
          echo "WARNING: " . $cl->GetLastWarning() . "
";
      }

      if ( ! empty($result["matches"]) ) {
          foreach ( $result["matches"] as $doc => $docinfo ) {
                echo "$doc
";
          }
          
          print_r( $result );
      }
  }
Dla API binarnego wystarczy usunąć "include" i dodać extension=sphinx.so w php.ini. API jest dość rozbudowane i obsługuje wiele opcji sortowania, czy też dopasowywania wyników. Bardziej szczegółowa dokumentacja dostępna jest w sieci:
Build a custom search engine with PHP
Dokumentacja API PHP na wiki Sphinxa
Lista artykułów poświęconych Sphinxowi
Dokumentacja
RkBlog

PHP w Akcji, 1 November 2008, Piotr Maliński

Comment article