2012-03-22 16 views
0

標準のEXTENDED2/SPH_RANK_PROXIMITY_BM25アプローチを使用して、中規模の製品データベース(10mmレコード、2GB)でsphinxを実行しています。スピードは素晴らしく、関連性にはスポットがあります。任意/部分一致のスフィンクスマッチングを調整する[PHP経由]

しかし、私たちは、データベースよりも複雑な用語で検索しているエンドユーザーの苦情が増えているため、結果が得られません。例えば

共通検索は「キッチンエイド職人5クォートは茶色のミキサースタンド」ている間、私たちは製品「キッチンエイド職人5クォートミキサー」を持っています。現在の設定での結果は、私たちが持っているアイテムを返すことができるはずです。

@weightモードでMATCH_ANYソートを試みましたが、スフィンクスが個々の言葉で他の製品をピックアップすると、関連性は完全に横になります[人形やボードゲームが出現すると思う]。

プロキシミティとワード密度の順位を引き続き維持しながら、よりオープンなマッチングを可能にするクエリパラメータを作成するベストプラクティスの方法はありますか?それはクォーラムある探検する

$cl = new SphinxClient(); 
$cl->SetServer('1.23.4', 456); 
$cl->SetMaxQueryTime(15000); 
$cl->SetMatchMode(SPH_MATCH_EXTENDED2); 
$cl->SetRankingMode(SPH_RANK_PROXIMITY_BM25); 
$cl->SetArrayResult(true); 
$cl->SetFilter('active', array(1)); 
$cl->SetSortMode(SPH_SORT_RELEVANCE, '@weight DESC, priced ASC'); 
$cl->SetLimits(intval($try), 1, 20, 500); 
$cl->SetFieldWeights(array('ptitle' => 60, 'description' => 40)); 
$res = $cl->query($searchterm,"products"); 

答えて

2

一つのことを助けている場合

は、ここに私たちの現在のPHP APIコマンドです。これは、特定の数のキーワードを必要とするため、長い照会に役立ちます。 ANYは1語だけ一致する必要がありますが、定足数には7のうち4が必要です。

これは、本当に悪いマッチを数多く除外します。

また、クォーラムは拡張マッチモードの一部としての構文なので、さまざまなランク付けモードを試すことができます。 SPH_RANK_MATCHANYを使用しても試してみることができます。なぜなら、 '部分的な'マッチでは合理的に良いはずだからです。しかし、他のモードを試すこともできます。

モルフォロジーを使用している場合は、index_exact_wordsを有効にしてランキングに追加することもできます。

だから

//this works as long as the user is not using special syntax, but if using -="() etc, need to be more clever 
$bits = preg_split('/\s+/',trim($searchterm)); 
$quorum = ceil(count($bits)*0.66); 
$searchterm2 = '='.implode(' =',$bits); 

$searchterm = '"'.$searchterm.'"/'.$quorum.' | "'.$searchterm2.'"/'.$quorum; 

はまた、私はあなたのsetLimitsに疑問を持っている...ような何かをするだろう。 20のmax_matchesは非常に低いようです。カットオフは不要に見える。それはあなたの問題を引き起こしているかもしれません。合理的な文書を500件見つけ出し、後でデータセットの中でより良い一致があったとしても、検索を中止します。

+0

クォーラムとあなたのコードは、ちょうど十分なものを解放するために必要なものと見えます。これにも取り組んでいる人たちにとって、近接が本当に役立つように、私たちはEXTENDED2試合に立ち向かいました。 また、カットオフが削除されました。 –

+0

注:提供されるコードには小さなバグがあります。 "最初の$。クォーラムの後"。問題に遭遇している人のためにビットを削除する必要があります。 –

+1

Opps!解決策を修正しました。 – barryhunter

関連する問題