私は、Sphinxを使用して異なるフィールドを持つ複数のMySQLテーブルを検索し、すべての結果を関連性に基づいて単一のセットに結合しようとしています。スフィンクスPHP APIを使用した複数のテーブルと集計結果の検索
私は各テーブルのインデックスを使ってSphinxを設定しました。すべてのインデックスを一度に検索して結果をうまく組み合わせています。
シェルでSEARCH
を使用してクエリを実行すると、すべての結果情報が期待どおりに返されます。しかし、PHP APIを使用すると、結果は行のIDだけで返ってくるため、どのテーブルから来たのかわからなくなります。
実際のデータにアクセスしてクエリを実行できるように、PHP APIがどのテーブル/インデックスから来たのかを教えてくれる方法はありますか?
私が考えている代替案は、シェルスクリプトからの出力を処理しようとしていますが、それは面倒です。
ここにPHPがあります: $ search = $ _GET ['query']; //接続情報 $ sphinxClient = new SphinxClient(); $ sphinxClient-> SetServer( 'localhost'、9312); $ sphinxClient-> SetMaxQueryTime(5000);
//Sphinx Result Configuration
$sphinxClient->SetMatchMode(SPH_MATCH_ANY);
$sphinxClient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
$sphinxClient->SetLimits(0, 20);
// Give me back the results as an array
$sphinxClient->SetArrayResult(true);
$searchResults = $sphinxClient->Query($search, 'user model');
シェルスクリプトは単純です: SEARCHTERMがどのように見える何かを出力し、検索
ある
./search SEARCHTERM
:
スフィンクス2.0.3を-release(r3043)設定ファイル '/ usr/local/sphinx/etc/sphinx'を使用している場合は、このファイルを削除する必要があります。 .conf '... index' user ':クエリ' NEWTON ':0.000秒で合計10件の一致が返されました。
1. document = 1、weight = 2629、time = Thu Jan 1 00 :33:32 1970 ID = 1 FIRST_NAME =ジョー LAST_NAME = Shmo 会社=アクメ
JSON形式でPHPのAPI出力: { "エラー": ""、 "警告": ""、 "ステータス": "良い"、 "フィールド":[ "名前"、 "code_name" 「参照」、「承認」、「used_num」、「avg_runtime」、「例」、「編集」、「編集」、「編集」、 {"id":1、 "weight": "1"、 "attrs":{"time":2012} "一致": "attrs":{"時間":2}、 }} ]、 "total": "1"、 "total_found": "1"、 "time": "0" "words":{"posuere":{"docs": "1"、 "ヒット": "2"}}
CPU集約であることを注意してください、それはですので、あなたがPHPのAPIの検索を実行するコードを追加してください。どのようにそれを行うより明確に。その次に、シェルのコマンドラインを文書化しておいてください。そうすれば、それを互いに比較することができます。 – hakre
./searchシェルスクリプトは本番用に開発されていません。これは、インデックスのステータスと内容をデバッグして監視するためのツールです。代わりに、Sphinx APIを使用する必要があります。 –