Sphinxは、全文検索を可能にするオープンソースの検索エンジンです。ご存知のとおり、ビッグデータを非常に効果的に検索できます。インデックス付けされるデータは通常、SQLデータベース、プレーンテキストファイル、HTMLファイル、メールボックスなど、非常に異なるソースから取得されます。
Sphinxの主な機能には次のものがあります。
このチュートリアルでは、配布パッケージに含まれているサンプルSQLファイルを使用して、SphinxサーバーとMySQLサーバーをセットアップします。プロジェクトでSphinxを使用する方法に関する基本的な知識を提供します。
このガイドを開始する前に、次のことを行う必要があります。
Sphinxはネイティブパッケージリポジトリにあるため、Ubuntuへのインストールは非常に簡単です。 apt-get
を使用してインストールします。
sudo apt-get install sphinxsearch
これで、サーバーにSphinxが正常にインストールされました。 Sphinxデーモンを起動する前に、構成しましょう。
次に、パッケージに付属のSQLファイルのサンプルデータを使用してデータベースを設定します。これにより、Sphinx検索が将来機能するかどうかをテストできます。
サンプルSQLファイルをデータベースにインポートしてみましょう。まず、MySQLサーバーシェルにログインします。
mysql -u root -p
求められたら、MySQLルートユーザーのパスワードを入力します。プロンプトが mysql>
に変わります。
仮想データベースを作成します。ここではテストと呼びますが、必要に応じて名前を付けることができます。
CREATE DATABASE test;
サンプルSQLファイルをインポートします。
SOURCE /etc/sphinxsearch/example.sql;
次に、MySQLシェルを終了します。
quit
これで、サンプルデータが入力されたデータベースができました。次に、Sphinxの構成をカスタマイズします。
Sphinxの構成は、 / etc / sphinxsearch
の sphinx.conf
という名前のファイルにある必要があります。この構成には、操作に不可欠な3つの主要なブロック、インデックス、検索、およびソースが含まれています。後でカスタマイズできるように、各パーツを使用および説明するためのサンプル構成ファイルを提供します。
まず、 sphinx.conf
ファイルを作成します。
sudo nano /etc/sphinxsearch/sphinx.conf
以下では、** index 、 search 、 source **ブロックを順番に説明します。次に、この手順の最後に、 sphinx.conf
を含むコンテンツ全体をコピーして、ファイルに貼り付けることができます。
**source **ブロックには、MySQLサーバータイプのソース、ユーザー名、およびパスワードが含まれています。 sql_query
の最初の列は一意のIDである必要があります。 SQLクエリは各インデックスで実行され、データをSphinxインデックスファイルにダンプします。以下は、各フィールドとソースブロック自体の説明です。
type
:インデックスを作成するデータソースのタイプ。この例では、これは** mysql **です。サポートされている他のタイプには、pgsql、mssql、xmlpipe2、odbcなどがあります。 sql_host
:MySQLホストのホスト名。この例では、これは localhost
です。これは、ドメインまたはIPアドレスにすることができます。 sql_user
:MySQLログインのユーザー名。この例では、これは** root **です。 sql_pass
:MySQLユーザーのパスワード。この例では、これはルートMySQLユーザーのパスワードです。 sql_db
:データが保存されているデータベースの名前。私たちの場合、これはテストです。 sql_query
:データベースからインデックスにデータをダンプするクエリ。これはソースブロックです:
source src1
{
type = mysql
# SQL settings(for ‘mysql’ and ‘pgsql’ types)
sql_host = localhost
sql_user = root
sql_pass = password
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 **コンポーネントには、ソースとストレージのデータパスが含まれています。に
source
:ソースブロックの名前。この例では、これは** src1 **です。 path
:インデックスを保存するためのパス。index test1
{
source = src1
path =/var/lib/sphinxsearch/data/test1
docinfo = extern
}
** searchd **コンポーネントには、Sphinxデーモンを実行するためのポートおよびその他の変数が含まれています。
listen
:Sphinxデーモンが実行されるポートと、それに続くプロトコル。この例では、これは** 9306:mysql41 *です。既知のプロトコルは:sphinx (SphinxAPI)および:mysql41 *(SphinxQL)です。 query_log
:クエリログを保存するためのパス。 pid_file
:SphinxデーモンのPIDファイルのパス。シームレス回転
:大量のデータを含むインデックスをプリキャッシュにローテーションするときに検索が停止するのを防ぎます。 preopen_indexes
:起動時にすべてのインデックスを事前に開くように強制するかどうか。 unlink_old
:ローテーションが成功したときに古いインデックスコピーを削除するかどうか。searchd
{
listen =9312:sphinx #SphinxAPI port
listen =9306:mysql41 #SphinxQL port
log =/var/log/sphinxsearch/searchd.log
query_log =/var/log/sphinxsearch/query.log
read_timeout =5
max_children =30
pid_file =/var/run/sphinxsearch/searchd.pid
seamless_rotate =1
preopen_indexes =1
unlink_old =1
binlog_path =/var/lib/sphinxsearch/data
}
コピーして貼り付ける完全な構成は次のとおりです。以下で変更する必要がある唯一の変数は、ソースブロックの sql_pass
変数で、次のようになります。
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = your_root_mysql_password
sql_db = test
sql_port =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 =/var/lib/sphinxsearch/data/test1
docinfo = extern
}
searchd
{
listen =9306:mysql41
log =/var/log/sphinxsearch/searchd.log
query_log =/var/log/sphinxsearch/query.log
read_timeout =5
max_children =30
pid_file =/var/run/sphinxsearch/searchd.pid
seamless_rotate =1
preopen_indexes =1
unlink_old =1
binlog_path =/var/lib/sphinxsearch/data
}
より多くの構成を調べるには、 / etc / sphinxsearch / sphinx.conf.sample
ファイルを確認してください。このファイルには、より詳細に説明されているすべての変数が含まれています。
このステップでは、Sphinxインデックスにデータを追加し、 cron
を使用して、インデックスが最新のデータを保持するようにします。
まず、前に作成した構成を使用して、インデックスにデータを追加します。
sudo indexer --all
次のようなものが得られるはずです。
Sphinx 2.2.9-id64-release(rel22-r5006)Copyright(c)2001-2015, Andrew Aksyonoff
Copyright(c)2008-2015, 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.010 sec,18552 bytes/sec,384.50 docs/sec
total 4 reads,0.000 sec,0.1 kb/call avg,0.0 msec/call avg
total 12 writes,0.000 sec,0.1 kb/call avg,0.0 msec/call avg
実稼働環境では、インデックスを最新の状態に保つ必要があります。これを行うには、cronjobを作成しましょう。まず、crontabを開きます。
crontab -e
使用するテキストエディタを尋ねられる場合があります。好きなものを選んでください。このチュートリアルでは、 nano
を使用しました。
次のcronjobは1時間ごとに実行され、前に作成した構成ファイルを使用して新しいデータをインデックスに追加します。それをコピーしてファイルの最後に貼り付けてから、ファイルを保存して閉じます。
@ hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
Sphinxが完全にセットアップおよび構成されたので、サービスを開始して試してみることができます。
デフォルトでは、Sphinxデーモンはオフになっています。まず、 / etc / default / sphinxsearch
の行 START = no
を START = yes
に変更して有効にします。
sudo sed -i 's/START=no/START=yes/g'/etc/default/sphinxsearch
次に、 systemctl
を使用してSphinxデーモンを再起動します。
sudo systemctl restart sphinxsearch.service
Sphinxデーモンが正しく実行されているかどうかを確認するには、それを実行します。
sudo systemctl status sphinxsearch.service
次のようなものが得られるはずです。
● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine
Loaded:loaded(/etc/init.d/sphinxsearch; bad; vendor preset: enabled)
Active:active(running) since Tue 2016-07-2601:50:00 EDT; 15s ago
...
これにより、サーバーが再起動された場合でも、Sphinxデーモンが確実に起動します。
すべての設定が完了したので、検索機能をテストしてみましょう。 MySQLインターフェイスを使用してSphinxQL(ポート9306)に接続します。プロンプトが mysql>
に変わります。
mysql -h0 -P9306
文章を検索してみましょう。
SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;
次のようなものが得られるはずです。
+- - - - - - +- - - - - - - - - - +- - - - - - - - - - - - +| id | group_id | date_added |+------+----------+------------+|1|1|1465979047||2|1|1465979047|+------+----------+------------+2 rows inset(0.00 sec)
+- - - - - - - - - - - - - - - +- - - - - - - - - - +| Variable_name | Value |+---------------+----------+| total |2|| total_found |2|| time |0.000|| keyword[0]| test || docs[0]|3|| hits[0]|5|| keyword[1]| document || docs[1]|2|| hits[1]|2|+---------------+----------+9 rows inset(0.00 sec)
上記の結果では、Sphinxがテスト文のインデックス test1
で2つの一致を検出したことがわかります。 SHOW META;
コマンドは、文中の各キーワードのヒット数も表示します。
いくつかのキーワードを検索してみましょう。
CALL KEYWORDS('test one three','test1',1);
次のようなものが得られるはずです。
+- - - - - - +- - - - - - - - - - - +- - - - - - - - - - - - +- - - - - - +- - - - - - +| qpos | tokenized | normalized | docs | hits |+------+-----------+------------+------+------+|1| test | test |3|5||2| one | one |1|2||3| three | three |0|0|+------+-----------+------------+------+------+3 rows inset(0.00 sec)
上記の結果では、** test1 **インデックスで、Sphinxが次のことを検出したことがわかります。
これで、MySQLシェルを離れることができます。
quit
このチュートリアルでは、Sphinxをインストールし、SphinxQLとMySQLを使用して簡単な検索を行う方法を示しました。
Sphinxを使用すると、カスタム検索をWebサイトに簡単に追加できます。
Sphinx関連のチュートリアルのインストールと構成の詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu16.04にSphinxをインストールして構成する方法」
Recommended Posts