ホームページ  >  記事  >  php教程  >  LNMP+sphinxでビッグデータの即時クエリを実現

LNMP+sphinxでビッグデータの即時クエリを実現

高洛峰
高洛峰オリジナル
2016-12-01 13:58:411584ブラウズ

Sphinx は、ロシアの Andrew Aksyonoff によって開発された全文検索エンジンです。他のアプリケーション向けに、高速かつ省スペースで、結果に関連性の高い全文検索機能を提供することを目的としています。 Sphinx は、SQL データベースやスクリプト言語と簡単に統合できます。現在のシステムには、MySQL および PostgreSQL データベース データ ソースのサポートが組み込まれており、標準入力からの特定形式の XML データの読み取りもサポートしています。


Sphinx には次の機能があります:

a) 高速インデックス作成 (最新の CPU では、ピーク パフォーマンスは 10 MB/秒に達する可能性があります)

b) 高性能検索 (2 ~ 4 GB のテキスト データに対して)平均すると、各取得の平均応答時間は 0.1 秒未満です);

c) 大量のデータを処理できます (現在、単一のファイルで 100 GB を超えるテキスト データと 1 億ドキュメントを処理できることがわかっています) CPU システム);

d) 優れた関連性アルゴリズム、フレーズの類似性と統計に基づく複合ランキング手法を提供します (BM25)。

e) 分散検索をサポートします。

f) フレーズ検索をサポートします。

g) ドキュメントの概要を提供します。生成

h ) 検索サービスを提供する MySQL ストレージ エンジンとして使用できます。

i) ブール値、フレーズ、単語の類似性などの複数の検索モードをサポートします。

j) ドキュメントは複数の全文検索フィールドをサポートします(最大 32 個まで);

k) ドキュメントは複数の追加属性情報 (グループ化情報、タイムスタンプなど) をサポートします。


mysql の MYISAM はフルテキストを提供します。さらに、結局のところ、データベースはそのような作業を行うのがあまり得意ではありません。データベースへの負担を軽減するには、これらのタスクをより適切なプログラムに任せる必要があります。したがって、mysql の全文インデックス作成ツールとして Sphinx を使用することは良い選択です。今週は主にこのツールの使い方を学びます。その学習プロセスを簡単に記録し、このツールを学んでいる他の友達に刺激を与えることができれば幸いです。


sphinxをインストールします

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

2. php拡張機能

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

をインストールします

3. 設定ファイルを作成します

cp /usr/local/sphinx/etc/sphinx-min.conf.dist  /usr/local/sphinx/etc/sphinx.conf

#
# 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
}

4.作成インデックスを作成して開始します

/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

5. クエリ検証

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

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                                                    |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。