ホームページ  >  記事  >  バックエンド開発  >  CakePHP で Sphinx を使用するにはどうすればよいですか?

CakePHP で Sphinx を使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-05 22:10:321482ブラウズ

CakePHP は、強力な機能と柔軟な設計を提供する優れた Web アプリケーション開発フレームワークです。 Sphinx は、大量のデータを効率的に処理するのに役立つ人気の全文検索エンジンです。

この記事では、CakePHP で Sphinx を使用して検索ニーズをより適切に処理する方法を紹介します。

  1. 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)

  1. Sphinx の構成

次に、ニーズに合わせて 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 サーバーのいくつかのパラメータが定義されます。

  1. CakePHP モデルの作成

次に、CakePHP でモデルを作成します。次のコマンドを使用して、Article という名前のモデル クラスを作成できます:

./bin/cakeakemodel Article

実行後、CakePHP は src/Model の下に Article という名前のモデル クラスを自動的に作成します。記事のモデルクラス。

  1. CakePHP コントローラー コードの作成

最後に、検索リクエストを処理するための 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。