標準の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");
クォーラムとあなたのコードは、ちょうど十分なものを解放するために必要なものと見えます。これにも取り組んでいる人たちにとって、近接が本当に役立つように、私たちはEXTENDED2試合に立ち向かいました。 また、カットオフが削除されました。 –
注:提供されるコードには小さなバグがあります。 "最初の$。クォーラムの後"。問題に遭遇している人のためにビットを削除する必要があります。 –
Opps!解決策を修正しました。 – barryhunter