開発者ドキュメント

Ubuntu14.04にSphinxをインストールして構成する方法

序章

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

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

このチュートリアルでは、配布パッケージに含まれているサンプル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

求められたら、MyQLrootユーザーのパスワードを入力します。 プロンプトが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インデックスファイルにダンプします。 以下は、各フィールドとソースブロック自体の説明です。

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 コンポーネントには、データを格納するためのソースとパスが含まれています。

index test1
{
  source			= src1
  path			= /var/lib/sphinxsearch/data/test1
  docinfo			= extern
  charset_type		= sbcs
}

searchd コンポーネントには、Sphinxデーモンを実行するためのポートとその他の変数が含まれています。

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		= password # 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

インデックスを最新の状態に保つために、cronジョブを作成しましょう。

crontabを開きます。

crontab -e

使用するテキストエディタを尋ねられる場合があります。 どちらかを選択してください。 このチュートリアルでは、nanoを使用しました。

以下をコピーしてファイルの最後に貼り付け、保存して閉じます。

@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all

上記のcronジョブは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実装もここここにあります。

PHPを使用している場合、ここはSphinxをテストするための便利な例です。

Sphinxを使用すると、サイトにカスタム検索を簡単に追加できます。 Sphinxの使用の詳細については、プロジェクトのWebサイトにアクセスしてください。

モバイルバージョンを終了