PHP+Sphinx を使用して効率的なオンサイト検索エンジンを構築します
1. Sphinx を使用する理由
現在フォーラムを運営していて、フォーラムのデータが 100 万を超えたと多くのユーザーが報告しているとします。フォーラムの検索速度が非常に遅い場合は、現時点では Sphinx の使用を検討してください (もちろん、他の全文検索プログラムや方法も機能します)。
2. Sphinx とは
Sphinx は、ロシアの Andrew Aksyonoff によって開発され、GPL と商業契約の二重ライセンス契約に基づいてリリースされた高性能全文検索ソフトウェア パッケージです。
全文検索とは、文書のすべてのテキスト情報を検索対象とする情報検索技術のことです。検索対象は、記事のタイトル、記事の著者、または記事の要約や内容などです。
3. Sphinx の機能
高速インデックス作成 (新しい CPU では約 10 MB/秒)
?ボリューム) 0.1 秒未満);
? 高可用性 (単一の CPU で最大 100 GB のテキスト、1 億のドキュメントをサポート可能)
?ドキュメント概要の生成を提供します。
?MySQL 内のプラグイン ストレージ エンジンからの検索を提供します。
?ブール値、フレーズ、および同義語のクエリをサポートします。
?ドキュメントごとに複数の全文検索フィールドをサポートします (デフォルトの最大値) 32);
?各ドキュメントの複数の属性をサポートします。
?単語の分割をサポートします。
?シングルバイト エンコードと UTF-8 エンコードをサポートします。
4. Sphinx をダウンロードしてインストールします。 🎜>
URL http://www.coreseek.cn/news/7/52/ を開いて、オペレーティング システムに適したバージョンを見つけます。たとえば、Windows の場合は、Coreseek Win32 ユニバーサルをダウンロードできます。 Linux では、ソース コード パッケージをダウンロードし、自分でコンパイルしてインストールできます。ダウンロードしたプログラムが Coreseek と呼ばれる理由については、次のとおりです。 Coreseek は、Sphinx にいくつかの変更を加えて開発されたソフトウェアであり、Sphinx よりも中国語をサポートしているため、これを使用します。
ダウンロードが完了したら、解凍したい場所にプログラムを解凍します。たとえば、E ドライブのルート ディレクトリに解凍し、ディレクトリ名を Coreseek に変更します。 Coreseek のインストールが完了しました。インストール ディレクトリは E:coreseek にあります。
5. Sphinx を使用する
Sphinx を使用するには、次のことを行う必要があります
1) まずデータを取得します
2) Sphinx 設定ファイルを作成します
3) 生成しますインデックス
4) Sphinx を開始します
5) それを使用します (API または search.exe プログラムを呼び出してクエリします)
パート 1: (データのインポート)
テストを構築するためにそれを使用する必要がありますデータベース、テーブル、データは、添付ファイルに含まれており、限られたスペースで利用できます。ダウンロードして MySQL にインポートするだけです。
パート 2: (構成ファイルの作成)
次に、Sphinx 構成ファイル E:coreseeketcmysql.conf を作成し、その内容を次のように変更する必要があります:
source mysql
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = テスト
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql _query = SELECT ID、 addtime,title,content FROM post
sql_attr_timestamp = addtime
}
index mysql
{
ソース = mysql
パス = E:/coreseek/var/data /mysql
charset_dictpath = E:/coreseek/etc/
charset_type = zh_cn.utf-8
}
searchd
{
listen = 9312
max_matches = 1000
pid_file = E:/coreseek/var/log/searchd_mysql.pid
log = E:/coreseek/var/log/searchd_mysql.log
query_log = E:/coreseek/var/log/query_mysql .log
}
まず、この設定ファイルの各項目の意味について説明します。
source mysql{} は、ソース名を mysql として定義します。または、次のように別の名前で呼び出すこともできます。source xxx{}
type データ ソース タイプ
sql_* データ関連の構成 (sql_host など)
sql_query でインデックスを構築するときにクエリ コマンドを説明しないでください。where と groupby の内容は Sphinx に任せると、より効率的に条件付きフィルタリングと groupby が実行されます。注: select フィールドには一意の主キーが含まれている必要があり、where で使用されるフィールドも選択する必要があります。sql_query を実行する前に実行する SQL コマンドです。この構成項目で始まる
sql_attr は、where、orderby、および groupby に表示されるフィールドはそれぞれ属性を定義する必要があります。たとえば、上記の sql_attr_timestamp は、タイムスタンプのタイプ。
index mysql{} は、インデックス名を mysql として定義するか、次のように別の名前で呼び出すこともできます。index xxx{}
source 関連するソースは、source xxx によって定義されます。
path インデックス ファイルのストレージ パス、例: E:/coreseek/var/data/mysql は、実際には E:/coreseek/var/data/ ディレクトリに保存され、mysql サフィックスが付いた異なる名前で複数のインデックス ファイルが作成されます。
charset_dictpath は、単語分割メソッドが辞書ファイルを読み取る場所を指定します。単語分割メソッドが有効な場合に必要です。 LibMMSeg を単語分割ライブラリとして使用する場合、辞書ファイル uni.lib が指定されたディレクトリ
charset_type 文字セット (charset_type = zh_cn.gbk
searchd{} など) にあることを確認する必要があります。スフィンクス デーモン構成
リッスン リスニング ポート
max_matches は一致の最大数です。つまり、どれだけ多くのデータが検索されても、ここで設定された 1000 項目のみが返されます。
log フルテキスト検索ログ
query_log クエリ。 log
わかりました、設定これがファイルです。設定するパラメータは他にもたくさんあります。ドキュメントを確認してください。
パート 3: (インデックスの生成)
「開始」>「実行」>「cmd」と入力して Enter キーを押し、コマンド ライン ツールを開きます
e:coreseeketcmysql.conf - - all
この一連の処理は実際にインデクサー プログラムを呼び出して、すべてのインデックスを生成します
特定のデータ ソースのみにインデックスを付けたい場合は、e:coreseekbinindexer --config e:coreseeketcmysql を実行できます。 conf インデックス名 (インデックス名は設定ファイルで定義されているものを指します)
--config,--all これらはインデクサー プログラムのパラメータです。詳細なパラメータを知りたい場合は、ドキュメントを確認してください。
コマンドの実行後に表示されていません。FATAL や ERROR のような表示があれば、インデックス ファイルは正常に生成されています。たとえば、
....省略...設定ファイル 'e:coreseeketcmysql.conf' を使用して...
インデックス 'mysql' をインデックス化...
4 つのドキュメント、0.0 MB を収集しました
………省略………
パート 4: (Sphinx の起動)
同じコマンド ラインで
e:coreseekbinsearchd --config e:coreseeketcmysql.conf
実行後に多くのプロンプトが表示されました
設定ファイル 'e: coreseeketcmysql.conf'...
すべてのインターフェイスでリッスン中、port=9312
接続を受け入れ中
これらの鳥の言葉が何を意味するかは心配しないでください。とにかく Sphinx が開始されます。
一連の Niaowen コマンド ラインはオフにできません。Sphinx をオフにすると、Sphinx もオフになるため、Sphinx をシステム サービスとしてインストールし、バックグラウンドで実行できます。
システム サービスをインストールするには、コマンド ラインに次のコマンドを入力します。
e:coreseekbinsearchd --config e:coreseeketcmysql.conf --install
インストール後、このサービスが起動しない場合は、忘れずに起動してください。まず、自分でグーグルすることはできません。