前書き

Sphinxは、全文検索を可能にするオープンソースの検索エンジンです。 大きなデータを非常に効率的に検索することで最もよく知られています。 索引付けされるデータは、通常、SQLデータベース、プレーンテキストファイル、HTMLファイル、メールボックスなど、さまざまなソースから取得されます。

  • Sphinxの主な機能は次のとおりです。*

  • 高いインデックス作成と検索のパフォーマンス

  • 高度なインデックス作成およびクエリツール

  • 高度な結果セットの後処理

  • 1秒あたり最大数十億のドキュメント、テラバイトのデータ、数千のクエリまでの実証済みのスケーラビリティ

  • SQLおよびXMLデータソース、SphinxQL、SphinxAPI、またはSphinxSE検索インターフェイスとの簡単な統合

  • 分散検索による簡単なスケーリング

このチュートリアルでは、配布パッケージに含まれるサンプルSQLファイルを使用して、MySQLサーバーでSphinxをセットアップします。 プロジェクトでSphinxを使用する方法の基本的なアイデアが得られます。

前提条件

このガイドを始める前に、次のものが必要です。

ステップ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

このセクションでは、検索をテストします。 次のコマンドを入力してください。

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サイト]をご覧ください。