前書き
Sphinxは、全文検索を可能にするオープンソースの検索エンジンです。 大きなデータを非常に効率的に検索することで最もよく知られています。 索引付けされるデータは、通常、SQLデータベース、プレーンテキストファイル、HTMLファイル、メールボックスなど、さまざまなソースから取得されます。
-
Sphinxの主な機能は次のとおりです。*
-
高いインデックス作成と検索のパフォーマンス
-
高度なインデックス作成およびクエリツール
-
高度な結果セットの後処理
-
1秒あたり最大数十億のドキュメント、テラバイトのデータ、数千のクエリまでの実証済みのスケーラビリティ
-
SQLおよびXMLデータソース、SphinxQL、SphinxAPI、またはSphinxSE検索インターフェイスとの簡単な統合
-
分散検索による簡単なスケーリング
このチュートリアルでは、配布パッケージに含まれるサンプルSQLファイルを使用して、MySQLサーバーでSphinxをセットアップします。 プロジェクトでSphinxを使用する方法の基本的なアイデアが得られます。
前提条件
このガイドを始める前に、次のものが必要です。
-
Ubuntu 14.04ドロップレット。
ステップ1-MySQLサーバーのインストール
注: MySQLサーバーをまだインストールしていない場合にのみ、このセクションを完了する必要があります。
このセクションでは、MySQLサーバーをインストールします。 MySQLでは、Sphinxの検索機能をテストするために使用できるサンプルデータのデータベースを保存できます。
パッケージリストを更新します。
sudo apt-get update
次に、MySQLサーバーをインストールします。
sudo apt-get install mysql-server
求められたらrootユーザーのパスワードを入力し、確認のために同じパスワードをもう一度入力します。
ステップ2-Sphinxのインストール
このセクションでは、Sphinxをインストールします。
Sphinxをインストールするには、次を実行します。
sudo apt-get install sphinxsearch
これで、サーバーにSphinxが正常にインストールされました。 Sphinxデーモンを開始する前に、構成してみましょう。
ステップ3 –テストデータベースの作成
このセクションでは、パッケージに付属のサンプルSQLファイルを使用してデータベースをセットアップします。
サンプルSQLファイルをデータベースにインポートしましょう。
MySQLサーバーシェルにログインします。
mysql -u root -p
求められたら、MysQL rootユーザーのパスワードを入力します。 プロンプトは `+ mysql> +`に変わります。
`+ test`という名前のデータベースを作成します。
CREATE DATABASE test;
SQLファイルをインポートします。
SOURCE /etc/sphinxsearch/example.sql;
次に、MySQLシェルを終了します。
quit
これで、テストデータベースにデータを入力する必要があります。
ステップ4 – Sphinxの構成
このセクションでは、Sphinx構成ファイルを構成します。
`+ sphinx.conf +`ファイルを作成します。
sudo nano /etc/sphinxsearch/sphinx.conf
Sphinxの構成は、実行に不可欠な3つのメインブロックで構成されています。 それらは* index 、 searchd 、および source *です。 これらの各ブロックについて以下に説明します。このステップの最後には、ファイルに貼り付けるための「+ sphinx.conf +」全体が含まれています。
-
source *ブロックには、MySQLサーバーへのソース、ユーザー名、およびパスワードのタイプが含まれています。 SQLクエリの最初の列は一意のIDである必要があります。 SQLクエリはすべてのインデックスで実行され、データをSphinxインデックスファイルにダンプします。 以下は、各フィールドとソースブロック自体の説明です。
-
+ sql_host +
:MySQLホストのホスト名。 この例では、これは* localhost *です。 これは、ドメインまたはIPアドレスにすることができます。 -
+ sql_user +
:MySQLログインのユーザー名。 この例では、これは* root *です。 -
+ sql_pass +
:MySQLユーザーのパスワード。 この例では、これは* root * MySQLユーザーのパスワードです -
+ sql_db +
:データを保存するデータベースの名前。 この例では、これは* test *です。 -
+ sql_query +
:これは、インデックスにデータをダンプするクエリです。
source src1
{
type = mysql
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
sql_query_info = SELECT * FROM documents WHERE id=$id
}
-
index *コンポーネントには、データを保存するためのソースとパスが含まれています。
-
+ source +
:ソースブロックの名前。 この例では、これは* src1 *です。 -
+ path +
:インデックスを保存するこのパス。 -
+ charset_type +
:これはインデックスの文字セットです。 また、これを* utf-8 *に設定します。
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
charset_type = sbcs
}
-
searchd *コンポーネントには、Sphinxデーモンを実行するためのポートおよびその他の変数が含まれています。
-
+ listen +
:これはsphinxデーモンが実行するポートです。 この例では、これは9312です。 -
+ query_log +
:クエリログを保存するこのパス。 -
+ pid_file +
:これは、SphinxデーモンのPIDファイルへのパスです。 -
+ max_matches +
:検索語ごとに返す最大一致数。 -
+ seamless_rotate +
:大量のデータを含むインデックスをプリキャッシュする際にsearchdストールを防ぎます。 -
+ preopen_indexes +
:起動時にすべてのインデックスを強制的にプリオープンするかどうか。 -
+ unlink_old +
:ローテーションが成功したときに古いインデックスコピーのリンクを解除するかどうか。
searchd
{
listen = 9312 # Port to listen on
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
max_matches = 1000
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 = # change this to your root users 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
sql_query_info = SELECT * FROM documents WHERE id=$id
}
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
charset_type = sbcs
}
searchd
{
listen = 9312
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
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
}
手順5-インデックスへのデータの追加
このセクションでは、Sphinxインデックスにデータを追加します。
前に作成した構成を使用して、インデックスにデータを追加します。
sudo indexer --all
次のようなものが表示されるはずです。
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
インデックスを最新の状態に保つために、cronjobを作成します。
crontabを開きます。
crontab -e
どのテキストエディターを使用するかを尋ねられる場合があります。 好きな方を選択してください。このチュートリアルでは、「+ nano +」を使用しました。
ファイルの最後に以下をコピーして貼り付け、保存して閉じます。
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
上記のcronjobは1時間ごとに実行され、デフォルトの設定ファイルを使用して新しいデータをインデックスに追加します。
ステップ6-Sphinxの開始
このセクションでは、Sphinxデーモンを起動します。
デフォルトでは、Sphinxデーモンはオフになっています。 Sphinxを有効にするには、まず `+ / etc / default / sphinxsearch +`を開きます。
sudo nano /etc/default/sphinxsearch
行「+ START = no +」を見つけて、yesに設定します。
START=yes
次に、ファイルを保存して閉じます。
最後に、Sphinxデーモンを起動します。
sudo service sphinxsearch start
ステップ7-検索のテスト
このセクションでは、検索をテストします。 次のコマンドを入力してください。
search this is my test document number
次のようなものが表示されるはずです。
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec
displaying matches:
1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=1
group_id=1
group_id2=5
date_added=2014-12-16 09:49:04
title=test one
content=this is my test document number one. also checking search within phrases.
2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=2
group_id=1
group_id2=6
date_added=2014-12-16 09:49:04
title=test two
content=this is my test document number two
words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'my': 2 documents, 2 hits
4. 'test': 3 documents, 5 hits
5. 'document': 2 documents, 2 hits
6. 'number': 3 documents, 3 hits
上記では、検索用語のテストインデックスから2つの一致を見つけることができます。 単語ごとに一致するものを見つけることもできます。
結論
このチュートリアルでは、コマンドラインを使用した非常に簡単な検索を示しました。 PHP、Perl、Python、Ruby、およびJavaの公式ネイティブSphinxAPI実装も見つけることができますhttps://code.google.com/p/sphinxsearch/source/browse/trunk/api/ [こちら]。
PHPを使用している場合、http://www.nearby.org.uk/sphinx/search-example.php [こちら]は、Sphinxをテストするための便利な例です。
Sphinxを使用すると、サイトにカスタム検索を簡単に追加できます。 Sphinxの使用の詳細については、http://sphinxsearch.com [プロジェクトWebサイト]をご覧ください。