Heim > php教程 > PHP开发 > Hauptteil

LNMP + Sphinx ermöglicht die sofortige Abfrage großer Datenmengen

高洛峰
Freigeben: 2016-12-01 13:58:41
Original
1640 Leute haben es durchsucht

Sphinx ist eine Volltextsuchmaschine, die vom Russen Andrew Aksyonoff entwickelt wurde. Es soll schnelle, platzsparende und ergebnisrelevante Volltextsuchfunktionen für andere Anwendungen bereitstellen. Sphinx lässt sich problemlos in SQL-Datenbanken und Skriptsprachen integrieren. Das aktuelle System verfügt über integrierte Unterstützung für MySQL- und PostgreSQL-Datenbankdatenquellen und unterstützt auch das Lesen von XML-Daten in einem bestimmten Format aus der Standardeingabe.


Die Funktionen von Sphinx sind wie folgt:

a) Hochgeschwindigkeitsindizierung (auf modernen CPUs kann die Spitzenleistung 10 MB/Sekunde erreichen);

b) Hochleistungssuche (bei 2–4 GB Textdaten beträgt die durchschnittliche Antwortzeit pro Abruf weniger als 0,1 Sekunden);

c) Kann große Datenmengen verarbeiten (derzeit). bekanntermaßen in der Lage, mehr als 100 GB Textdaten zu verarbeiten, 100 Millionen Dokumente können auf einem einzigen CPU-System verarbeitet werden);

d) Bietet einen hervorragenden Relevanzalgorithmus, eine zusammengesetzte Ranking-Methode basierend auf Phrasenähnlichkeit und Statistiken (BM25);

e) Unterstützt verteilte Suche;

f) Unterstützt Phrasensuche

g) Bietet Dokumentzusammenfassungsgenerierung

h) Kann sein bereitgestellt als MySQL-Speicher-Engine-Suchdienst;

i) Unterstützt mehrere Suchmodi wie Boolesch, Phrase, Wortähnlichkeit usw.;

j) Dokument unterstützt mehrere Volltextsuchfelder ( maximal 32);

k) Dokument unterstützt mehrere zusätzliche Attributinformationen (wie Gruppierungsinformationen, Zeitstempel usw.);

l) Unterstützt Wortsegmentierung; >

Obwohl MYISAM von MySQL eine Volltextindizierung bietet, ist die Leistung nicht sehr gut. Darüber hinaus müssen wir diese Aufgaben geeigneten Programmen überlassen der Druck auf die Datenbank. Daher ist die Verwendung von Sphinx als Volltext-Indexierungstool für MySQL eine gute Wahl. Diese Woche werde ich hauptsächlich lernen, wie man dieses Tool verwendet. Ich werde den Lernprozess kurz aufzeichnen und ein Memo erstellen. Ich hoffe, es kann andere Freunde inspirieren, die dieses Tool lernen.

Sphinx installieren

wget http://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gz
tar -xf sphinx-2.2.11-release.tar.gz  && cd sphinx-2.2.11-release
./configure  --prefix=/usr/local/spinx --with-mysql
make && make install
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
libsphinxclient 安装(PHP模块需要)
cd api/libsphinxclient
./configure –prefix=/usr/local/sphinx
make &&  make install
Nach dem Login kopieren

2. PHP-Erweiterung installieren

wget http://pecl.php.net/get/sphinx-1.3.0.tgz
tar zxf sphinx-1.3.3.tgz && cd sphinx-1.3.3
./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinx/
make &&  make install
Nach dem Login kopieren

3. Konfigurationsdatei erstellen

cp /usr/local/sphinx/etc/sphinx-min.conf.dist  /usr/local/sphinx/etc/sphinx.conf
Nach dem Login kopieren

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
 
source src1
{
        type                    = mysql
 
        sql_host                = localhost
        sql_user                = root
        sql_pass                = www.123
        sql_db                  = test
        sql_port                = 3306  # optional, default is 3306
 
        sql_query               = \
                SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
                FROM documents
 
        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
}
 
 
index test1
{
        source                  = src1
        path                    = /usr/local/spinx/var/data/test1
}
 
 
indexer
{
        mem_limit               = 32M
}
 
 
searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /usr/local/spinx/var/log/searchd.log
        query_log               = /usr/local/spinx/var/log/query.log
        read_timeout            = 5
        max_children            = 30
        pid_file                = /usr/local/spinx/var/log/searchd.pid
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /usr/local/spinx/var/data
}
Nach dem Login kopieren

4. Index erstellen und starten

/usr/local/spinx/bin/indexer  -c /usr/local/spinx/etc/sphinx.conf --all
/usr/local/spinx/bin/searchd  -c /usr/local/spinx/etc/sphinx.conf
Nach dem Login kopieren

5. Abfrageverifizierung

cd /root/sphinx-2.2.11-release/api
python test.py  test
DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API
Query 'test ' retrieved 3 of 3 matches in 0.000 sec
Query stats:
        'test' found 5 times in 3 documents
Matches:
1. doc_id=1, weight=2, group_id=1, date_added=2016-11-30 01:21:20
2. doc_id=2, weight=2, group_id=1, date_added=2016-11-30 01:21:20
3. doc_id=4, weight=1, group_id=2, date_added=2016-11-30 01:21:20
Nach dem Login kopieren


mysql> select * from documents;
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
| id | group_id | group_id2 | date_added          | title           | content                                                                   |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
|  1 |        1 |         5 | 2016-11-30 01:21:20 | test one        | this is my test document number one. also checking search within phrases. |
|  2 |        1 |         6 | 2016-11-30 01:21:20 | test two        | this is my test document number two                                       |
|  3 |        2 |         7 | 2016-11-30 01:21:20 | another doc     | this is another group                                                     |
|  4 |        2 |         8 | 2016-11-30 01:21:20 | doc number four | this is to test groups                                                    |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage