CakePHP は、強力な機能と柔軟な設計を提供する優れた Web アプリケーション開発フレームワークです。 Sphinx は、大量のデータを効率的に処理するのに役立つ人気の全文検索エンジンです。
この記事では、CakePHP で Sphinx を使用して検索ニーズをより適切に処理する方法を紹介します。
まず、Sphinx をインストールする必要があります。 Sphinx は、ソース コードのインストール、バイナリ パッケージのインストールなど、さまざまなインストール方法を提供します。ここでは、Ubuntu Linux で APT を使用して Sphinx をインストールする方法を紹介します。
ターミナルを開いて次のコマンドを入力します:
sudo apt-get update
sudo apt-get install sphinxsearch
インストールが完了したら、次のコマンドを使用できます。次のコマンドを使用して、Sphinx が正しくインストールされているかどうかを確認します:
sudo /usr/bin/searchd
すべてが正常であれば、次のような出力が表示されるはずです:
Sphinx 3.1.1-id64- release (commit 4b8c4635)
Copyright (c) 2001-2020, Andrew Aksyonoff
Copyright (c) 2008-2020, Sphinx Technologies Inc (http://sphinxsearch.com)
次に、ニーズに合わせて Sphinx を構成する必要があります。 Sphinx 設定ファイルは /etc/sphinxsearch/sphinx.conf にあります。次のコマンドを使用してこのファイルを編集できます:
sudo nano /etc/sphinxsearch/sphinx.conf
これは簡単な設定例です:
source src1
{
type = mysql sql_host = localhost sql_user = username sql_pass = password sql_db = database sql_query = SELECT id, title, content FROM articles
}
index idx1
{
source = src1 path = /var/lib/sphinxsearch/data/idx1 docinfo = extern morphology = stem_en charset_type = utf-8 min_word_len = 3
}
searchd
{
listen = 127.0.0.1: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
}
ここでは、src1 という名前のデータ ソースを定義し、データの取得に MySQL データベースを使用します。取得するデータ テーブルは記事、取得するデータ フィールドは ID、タイトル、コンテンツです。
次に、idx1 という名前のインデックスが定義され、src1 がデータ ソースとして使用され、インデックス ファイルが /var/lib/sphinxsearch/data/idx1 ディレクトリに保存されます。
最後に、listen IP とポート、ログ ファイル パス、クエリ タイムアウトなど、searchd サーバーのいくつかのパラメータが定義されます。
次に、CakePHP でモデルを作成します。次のコマンドを使用して、Article という名前のモデル クラスを作成できます:
./bin/cakeakemodel Article
実行後、CakePHP は src/Model の下に Article という名前のモデル クラスを自動的に作成します。記事のモデルクラス。
最後に、検索リクエストを処理するための CakePHP コントローラー コードを作成する必要があります。これは簡単な例です:
namespace AppController;
CakeCoreExceptionExceptionを使用;
CakeUtilitySecurityを使用;
CakeUtilityHashを使用;
CakeORMTableRegistryを使用;
使用CakeHttpClient;
class ArticlesController extends AppController
{
public function search() { $this->loadModel('Articles'); $q = $this->request->getQuery('q'); $indexer = new SphinxClient(); $indexer->setServer('localhost', 9312); $indexer->setMatchMode(SphinxClient::SPH_MATCH_ALL); $result = $indexer->query($q, 'idx1'); $ids = Hash::extract($result['matches'], '{n}.id'); $articles = $this->Articles->find()->where(['id IN' => $ids]); $this->set(compact('articles', 'q')); }
}
ここでは、まず Articles モデル クラスをロードし、HTTP クエリ パラメーターの文字「q」という名前の検索キーを取得します。 。
次に、SphinxClient オブジェクトを作成し、Sphinx サーバーのアドレスとポートを設定し、検索クエリに SPH_MATCH_ALL モードを使用します。
次に、Sphinx によって返された結果から ID を抽出し、Articles モデルでこれらの記事データを検索します。
最後に、クエリ結果をビューに表示します。
上記の手順により、Sphinx を使用して CakePHP に全文検索を実装できます。実際の開発では、さまざまなビジネス ニーズに合わせて、必要に応じて検索機能をさらに拡張および最適化できます。
以上がCakePHP で Sphinx を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。