Sphinx je jednoduchý, relevantní a open source fulltextový vyhledávací server. Je napsán v programovacím jazyce C++ a pracuje s Linuxem a dalšími populárními operačními systémy. Tento tutoriál vám pomůže nainstalovat a nakonfigurovat server fulltextového vyhledávání Sphinx na operačních systémech Ubuntu 16.04, 14.04 LTS.
Předpoklady
Než začnete s touto příručkou, musíte mít následující.
- Server Ubuntu s přístupem sudo
- Předinstalovaný server MySQL
Krok 1 – Instalace Sphinx
Instalace Sphinx na Ubuntu je snadná, protože je v nativním úložišti balíčků. Nainstalujte jej pomocí správce balíčků apt-get na vašem systému Ubuntu.
sudo add-apt-repository ppa:builds/sphinxsearch-rel22 sudo apt-get update sudo apt-get install sphinxsearch
Krok 2 – Import databáze MySQL
Pojďme importovat ukázkový soubor SQL do databáze. Nejprve vytvořte databázi s názvem test na vašem serveru MySQL a poté obnovte databázi poskytovanou vyhledávacím balíčkem sphinx.
sudo mysqladmin -u root -p create test sudo mysql -u root -p test < /usr/share/doc/sphinxsearch/example-conf/example.sql
Krok 3 – Konfigurace Sfingy
Upravte konfiguraci sphinx, jak je uvedeno níže, a upravte konfiguraci připojení MySQL, jak je uvedeno níže.
sudo vi /etc/sphinxsearch/sphinx.conf
source src1 { # data source type. mandatory, no default value # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc type = mysql ##################################################################### ## SQL settings (for 'mysql' and 'pgsql' types) ##################################################################### # some straightforward parameters for SQL source types sql_host = localhost sql_user = root sql_pass = secret sql_db = test sql_port = 3306 # optional, default is 3306
Krok 4 – Spuštění Indexeru
Spusťte indexátor a vytvořte fulltextový index z vašich dat. Indexer je prvním ze dvou hlavních nástrojů jako součást Sphinx. Slouží ke shromažďování dat, která budou prohledávatelná. Výsledky uvidíte jako níže.
sudo indexer --all Sphinx 2.2.11-id64-release (95ae9a6) Copyright (c) 2001-2016, Andrew Aksyonoff Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com) using config file '/etc/sphinxsearch/sphinx.conf'... indexing index 'test1'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.006 sec, 30791 bytes/sec, 638.16 docs/sec indexing index 'test1stemmed'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.001 sec, 99382 bytes/sec, 2059.73 docs/sec skipping non-plain index 'dist1'... skipping non-plain index 'rt'... total 8 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg total 24 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
Krok 5 – Spuštění Sfingy
Také nakonfigurujte svůj server Sphinx tak, aby se automaticky spouštěl při spouštění systému. Pomocí níže uvedeného příkazu nastavte START na ano.
sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
Nyní také poprvé spusťte službu a zkontrolujte stav.
service sphinxsearch start service sphinxsearch status
Můžete také nakonfigurovat indexátor ve vašem crontab tak, aby jej spouštěl v pravidelných intervalech. Níže uvedený crontab poběží každou hodinu.
0 * * * * /usr/bin/indexer --rotate --all
Krok 6 – Práce se Sfingou
Proveďme nějaké dotazy na vašem serveru Sphinx. Nejprve se připojte k serveru Sphinx MySQL pomocí následujícího příkazu ocmand.
mysql -h0 -P9306
Nyní spusťte jeden po druhém příkaz níže a podívejte se na změny. Toto je pouze pro vaše vlastní učení.
mysql> SELECT * FROM test1 WHERE MATCH('document'); mysql> INSERT INTO rt VALUES (1, 'adding', 'sample text here', 11); mysql> INSERT INTO rt VALUES (2, 'adding some more', 'sample text here', 22); mysql> SELECT gid/11 FROM rt WHERE MATCH('sample') GROUP BY gid; mysql> SELECT * FROM rt ORDER BY gid DESC; mysql> SELECT *, WEIGHT() FROM test1 WHERE MATCH('"document one"/1'); mysql> SHOW META; mysql> SET profiling=1; mysql> SELECT * FROM test1 WHERE id IN (1,2,4); mysql> SHOW PROFILE; mysql> SELECT id, id%3 idd FROM test1 WHERE MATCH('this is | nothing') GROUP BY idd; mysql> SHOW PROFILE; mysql> SELECT id FROM test1 WHERE MATCH('is this a good plan?'); mysql> SHOW PLAN; mysql> SELECT COUNT(*) FROM test1; mysql> CALL KEYWORDS ('one two three', 'test1'); mysql> CALL KEYWORDS ('one two three', 'test1', 1); mysql> SHOW TABLES;