Sphinxを使用して、フィールドが異なる複数のMySQLテーブルを検索し、関連性に基づいてすべての結果を1つのセットに結合しようとしています。
各テーブルのインデックスを使用して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' );
シェルスクリプトは単純です。
./search SEARCHTERM
ここで、SEARCHTERMは検索です
次のようなものを出力します。
Sphinx 2.0.3-リリース(r3043)Copyright(c)2001-2011、Andrew Aksyonoff Copyright(c)2008-2011、Sphinx Technologies Inc(http://sphinxsearch.com)
設定ファイルを使用する'/usr/local/sphinx/etc/sphinx.conf'... index'user':クエリ'NEWTON':0.000秒で合計10個の一致を10個返しました
一致の表示:1。document = 1、weight = 2629、time = Thu Jan 1 00:33:32 1970 id = 1 first_name = Joe last_name = Shmo company = Acme
JSON形式のPHPAPI出力: {"error": ""、 "warning": ""、 "status": "good"、 "fields":["name"、 "code_name"、 "code"、 "description "、"rating "、" angles "、" published "、" key_words "、" reference_num "、" expected "、" used_num "、" avg_runtime "、" examples "、" editor "、" published_time "]、" attrs " :{"time":2}、 "matches":[{"id":1、 "weight": "1"、 "attrs":{"time":2012}}]、 "total": "1" 、"total_found": "1"、 "時間":"0.000"、 "words":{"posuere":{"docs": "1"、 "hits": "2"}}}