みなさんこんにちは! 少し前まで、
Cackle Reviewsレビュー
システムの全文検索を実装しました。 素晴らしい結果が得られ、モデレーターは単語または文ごとに数ミリ秒でコメントを見つけることができ、ステミング(単語またはその単語形式の一部によるファジー検索)をサポートしています。 これはすべて、フルテキスト検索エンジンであるSphinxで機能します。
インターネットにはSphinxに関する多くの記事がありますが、残念ながら、それらのいくつかは時代遅れであり、他のいくつかは完全で正確な方法を主張していません。 そのため、この投稿では、すべての手順(インストール、構成、インデックス作成、デルタインデックスのサポート)を説明しようとしました。
1. Sphinxのインストール
すでに述べたように、
Sphinxは全文検索システムです。 Sphinxの選択は偶然ではなく、事実、このシステムはエンジンの
速度と機能を比較するいくつかの
テストに基づいて最速であるという事実です。
インストールドキュメントはあまり良くありません。 したがって、Sphinxと対話するには、MySQLクライアント(Sphinx APIを操作するため)とSphinx自体が必要です。 以下は、Linuxに必要なすべてのライブラリをインストールするコマンドです(この例ではLinux Debian 8 64ビットを使用しています)。
2. Sphinxの構成
インストールが成功した場合、sphinxsearchデーモンがLinuxに表示されるはずです。これは今のところ停止できます(
/etc/init.d/sphinxsearch stop
)。 次に、インデックスを格納するためのディレクトリ構造を作成する必要があります。この場合、メインインデックスとデルタインデックスの2つがあります。 メインはすべてのデータを保存しますが、デルタは今日のみインデックス作成を高速化するためのものです。
mkdir /opt/sphinx mkdir /opt/sphinx/data
Sphinxの設定を編集します(デフォルトでは/etc/sphinxsearch/sphinx.conf)。 すべてのレビューがレビューテーブルに保存され、フィールドにインデックスが付けられていることを明確にする必要があります。
- id-失効識別子。
- site_id-レビューが配置されているサイトの識別子。
- ステータス-失効ステータス(承認済み、モデレート済み、スパム、削除済み);
- 長所-美徳;
- 短所-欠点;
- コメント-コメント。
3.起動
すべての準備ができたら、searchdデーモン(/etc/init.d/sphinxsearch start)を開始し、レビューレビュー(メインインデックス)を開始できます。
indexer --config /etc/sphinxsearch/sphinx.conf review
したがって、730,422件のレビューはすべて84秒で索引付けされました。 これで、MySQL(mysql:// localhost:9306)を介してSphinxに接続し、SQLコマンドを検索できます。
数ミリ秒で、レビューのIDを取得します。このIDに基づいて、レビューテーブルからメインデータベースから選択を行い、結果をクライアントに返すことができます。
4.デルタインデックスの設定
すでに述べたように、小さなデータサイズにすばやくインデックスを作成するには、デルタインデックスが必要です。 私たちの場合、これらはすべて当日に蓄積された新しいレビューです。 この設定では、クラウンに2つのジョブを作成します。
crontab -e
review_update.shスクリプトは、review_deltaインデックス作成を開始し、search_fulltextテーブルの最大IDを更新し、レビューとreview_deltaインデックスの結果をマージします。
PGPASSWORD=postgres_password; export PGPASSWORD; indexer
その後、review_deltaテーブルをSQL検索クエリに追加すると、メインとデルタの2つのインデックスからすぐに選択されます。
この実装には1日かかりました。その結果、安定性のある全文検索を作成しました。この検索は、数か月間、問題なく動作します。 ちなみに、
Cackle Commentsコメントシステムに同様の構成とジョブ(レビューはコメントに置き換えられます)を追加すると、コメントの検索が実装されました。
質問は大歓迎です。 ご清聴ありがとうございました。 すべて成功!