Mysql
 sql >> Database >  >> RDS >> Mysql

Guida all'uso di Sphinx con PHP e MySQL

Mi sono imbattuto in questo post ma non ho trovato una risposta che volevo vedere. Quindi ecco la mia guida rapida:

1. Installa Sfinge

Su Mac con Homebrew:

brew install sphinx

Su Amazon Linux (CentOS) con yum:

yum install sphinx

2. Crea configurazione Sfinge

Sphinx viene fornito con un modello di configurazione. Cerca sphinx.conf.dist nella directory configs:

Su Mac installato con Homebrew:

/usr/local/Cellar/sphinx/<sphinx version>/etc

Su Amazon Linux installato con yum:

/etc/sphinx

È piuttosto semplice ma potrebbe contenere troppe impostazioni per un principiante. In tal caso puoi usare questa semplice configurazione:

source TestSource {
    type = mysql
    sql_host = <host>
    sql_user = <user>
    sql_pass = <password>
    sql_db = <db>

    sql_query_range = select min(id), max(id) from TestTable
    sql_range_step = 2048

    sql_query = select id, some_info from TestTable\
        where id >= $start and id <= $end
}

index TestIndex {
    source = TestSource
    path = /var/lib/sphinx/test-index
    min_word_len = 3
    min_infix_len = 3
}

searchd {
    log = /var/log/sphinx/searchd.log
    query_log = /var/log/sphinx/query.log
    pid_file = /var/run/searchd.pid

    max_matches = 200

    listen = localhost:9312
}

Ho aggiunto l'impostazione max_matches a questa configurazione perché la mia prima domanda dopo che tutto funzionava era "Perché ottengo sempre solo 20 risultati di ricerca?". Con max_matches puoi impostare il limite per il numero dei risultati di ricerca.

3. Crea un indice utilizzando l'indicizzatore

indexer --all

4. Esegui il demone Sphinx

sudo searchd -c /path/to/config/sphinx.conf

5. Installa l'estensione PHP Sphinx

Su Mac con Homebrew:

brew install homebrew/php/php56-sphinx

Su Amazon Linux con yum:

yum install libsphinxclient
pecl install sphinx

6. Interroga il tuo indice da PHP

$index = new SphinxClient();
$index->setServer("127.0.0.1", 9312);

$result = $index->query('some search term', 'TestIndex');

print_r($result);

In caso di errori puoi ottenere maggiori informazioni con il seguente metodo:

$index->getLastError();

7. Tieniti aggiornato indice

Per mantenere un indice aggiornato puoi utilizzare due indici:

  1. Indice principale, che non viene aggiornato spesso (una volta alla settimana, al mese, ecc.)
  2. E indice delta, che si aggiorna spesso (ogni ora, 5 minuti, ecc.)

Ogni volta che l'indice delta viene reindicizzato, viene unito all'indice principale

Segui questo link http://www.sphinxconsultant.com/sphinx-search-delta -indicizzazione/ per saperne di più su questo approccio.

Link che ho trovato utili: