2012-02-03 13 views
0

は、それがそうであるならば、親切に私にサンプルまたは参照URLを添付Sphinx PHP APIを使用したランク付けに基づいてSphinxの結果を得るには?

For example, 
---------------------------------------------- 
Searched_Query | Result  | Ranks 
---------------------------------------------- 
Sony Ericsson  Sony Ericsson  Best Match 
        Ericsson   Good Match 
        Sony DVD   Fair Match 
        DVD    Poor Match 
---------------------------------------------- 

、スフィンクスPHPのAPIを使用してランク付けに基づいてスフィンクスの結果を表示することが可能です。

お願いします。

おかげで、 ラジャ

答えて

0
require_once ("sphinxapi.php"); 

$cl = new SphinxClient(); 

$cl->SetServer ("localhost", 9312); 
$cl->SetMatchMode (SPH_MATCH_EXTENDED2); 
$cl->SetSortMode (SPH_SORT_EXTENDED, "@weight DESC"); 
$res = $cl->Query ("Sony Ericsson", "your_sphinx_index_name"); 
if ($res===false) 
{ 
     print "ERROR: Query failed: " . $cl->GetLastError() . ".\n"; 
} else { 
     if ($cl->GetLastWarning()) print "WARNING: " . $cl->GetLastWarning() . "\n\n"; 

     // result processing is here 
} 
+0

あなたのreply.Let私はこれであなたに戻ってあなたの返事をありがとうございます。 – Raja

1

はいなし。スフィンクスはデフォルトで順位をつけています。 (しかし、これは変更できます)

重要な点はここでは「一致」です。レコードは照会にも一致しますか? (それぞれの試合にスコアを与える「ランキング」のタスクとは少し異なります)

「マッチする」スタイルマッチングを使用する必要があります。どちらの言葉が必要なのか。デフォルトでは、すべての単語を必要とする "ALL"と一致します。 Quorumまたは 'OR'クエリのいずれかを使用して、EXTENDEDマッチモードでanyをエミュレートすることもできます。

...これらの用語の詳細については、スフィンクスのドキュメントをご覧ください。

スフィンクスは実際にあなたの例の最後の結果を得られないので、私は 'close'と言った。それは共通の言葉を共有しないためです。最初の3人はすべて共通の言葉を共有しています。

おそらく、あなたはmysqlフルテキスト検索の「WITH EXPANSION」オプションを考えています。これはこれを行います。スフィンクスは直接比較できる機能を持っていないので、自分で実装する必要があります。 (例えば、「任意のqyery」を実行し、トップ100の結果を出し、(あなたのコード内で)一般的な単語を取り除く)、そしてスフィンクスへの2番目のクエリを作成します。この2番目のクエリを結果としてユーザーに表示します)

[別のオプションがあり、すべてのドキュメントに一致するクエリを作成し、次に[一致]が近くに表示されるようにランク付けすることができます上。私は一般的な検索のためにこのthoをお勧めしません]

+0

ありがとうございました。これが私がより良い結果を出すのを助けてくれることを願っています。 – Raja

関連する問題