0

私はスフィンクス2.0を使用しています。

次の結果を達成したい:

  1. ユーザーは他の検索用語でタグを入力します。ユーザー入力タグに関連付けられたドキュメントは、距離でソートされて一番上に表示されます。
  2. その後、ドキュメントには距離でソートされたタグが含まれません。

私がしていること:

@ name、@ tag、@ streetnameなどを使用して同時にさまざまなパラメータを検索しているので、以下を使用しています

$cl->SetMatchMode(SPH_MATCH_EXTENDED);

を使用して結果を距離で並べ替えます$cl->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc');

タグファイルには、OR演算子を使用して目的の結果を取得するために使用している複数の値を含めることができます。

@tagsのみを検索すると、前述の要件を達成できます。ただし、ユーザー入力が@tag food |dinner @city london@nametaxiの場合

次に、名前が次のようになります:London Taxi、street:Londonが一番上に来るか、その他の位置で並べ替え順序を緯度経度で破ります。ロンドンには2つのパラメータがあるため、タグで並べ替えるだけなので、他の検索用語の重みを並べ替え順序に含めたくありません。

ランキングモードは:$cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);

この問題を克服するための提案はありますか?またはそれを実装する他の方法。

どうもありがとう。

4

1 に答える 1

1

これを解決する方法は、タグ フィールドでの一致を調整して、はるかに上位にランク付けすることだと思います。それをテストする必要がありますが、このようなもの...

$cl->setFieldWeights(array('tags' => 100000));

$cl->setSelect("*,IF(@weight>100000,1,0) AS matchtags");

$cl->SetSortMode(SPH_SORT_EXTENDED, 'matchtags DESC, @geodist ASC');
于 2012-06-14T13:27:38.567 に答える