Sphinx PHP は、効率的な検索機能の実現に役立つ強力な全文検索エンジンです。実際のアプリケーションでは、複数のテーブルに対して結合検索を実行し、結果をマージする必要がある場合があります。この記事では、Sphinx PHP を使用して複数テーブルの結合検索と結果のマージを実装する方法を紹介し、具体的なコード例を示します。
まず、Sphinx PHP 環境を準備する必要があります。 Composer を使用して Sphinx PHP をインストールできます。プロジェクト ディレクトリの composer.json
ファイルに次の依存関係を追加するだけです:
{ "require": { "sphinxsearch/sphinx-php": "^2.2" } }
その後、composer install
を実行します。コマンドを使用して依存関係をインストールします。
次に、Sphinx のインデックスを設定する必要があります。 2 つのテーブルがあり、1 つはユーザーの名前と年齢を含む users
テーブル、もう 1 つは製品の名前と説明を含む products
テーブルであるとします。両方のテーブルを検索して結果をマージできるようにしたいと考えています。
まず、Sphinx 構成ファイル内に、users
テーブルと products
テーブルに対応する 2 つのインデックスを定義します。例:
index users_index { source = users path = /var/data/users ... } index products_index { source = products path = /var/data/products ... }
次に、searchd
構成でインデックス マージを次のように定義します。
index my_index { type = distributed local = users_index local = products_index }
このようにして、my_index# # という名前のインデックスを定義します。 # インデックス。これには、
users_index と
products_index という 2 つのローカル インデックスが含まれます。
require_once 'vendor/autoload.php'; use SphinxSphinxClient; // 创建 Sphinx 客户端实例 $client = new SphinxClient(); // 连接到 Sphinx 服务器 $client->SetServer('127.0.0.1', 9312);次に、クエリ オプションを設定して検索するインデックスを指定し、検索操作を実行します:
// 设置查询选项 $client->SetMatchMode(SphinxClient::SPH_MATCH_ALL); // 设置匹配模式 $client->SetLimits(0, 10); // 设置返回结果数量 // 执行搜索操作 $result = $client->Query('关键词', 'my_index'); // 处理搜索结果 if ($result !== false) { if ($result['total'] > 0) { foreach ($result['matches'] as $match) { // 处理每个匹配项 echo $match['id'] . ': ' . $match['weight'] . " "; } } else { echo '没有找到匹配项。'; } } else { echo '搜索失败。'; }上記のコードでは、最初に
SetMatchMode メソッドを通じてマッチング モードを設定します。ここではフルテキスト マッチング モード (
SPH_MATCH_ALL) が使用されています。つまり、クエリ キーワードは次のとおりです。完全に一致すること。次に、返される結果の開始位置と数が
SetLimits メソッドによって設定されます。ここでは、最初の 10 件の結果が返されるように設定されています。最後に、
Query メソッドで検索操作を実行し、検索結果を取得します。
Query メソッドの 2 番目のパラメーターは検索するインデックスを指定し、ここでは前に定義した
my_index インデックスが使用されることに注意してください。
以上がSphinx PHP が複数テーブルの結合検索と結果のマージを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。