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