名前、電話番号、および私との関係の種類 (友人、家族、知人など) の列を含む大きなテーブルがあります。Sphinx で名前を検索するとき、フィールド値が「家族」の結果を「知人」よりも高く重み付けしたいと考えています。特定の行の重みを手動で設定して、重みを高くするにはどうすればよいですか?
1110 次
1 に答える
0
多くのオプション...
A)「タイプ」をに保存できますattribute
-属性は(sとは異なり)インデックスに保存されfield
、結果のソートに使用できます。
あなたがそれをどのように正確に行うかは、主に個人的な好みの問題です.
例えば:
sql_query = SELECT id,name,phone,type,(type=family) as boost from table
sql_attr_bool = boost
次に、クエリをブースト属性で並べ替えることができます。... ORDER BY boost DESC, WEIGHT() DESC
タイプを単純な数値整数として格納し、各タイプの値を設定することもできます。そのような方法で設定すると、その列で自然にソートできます。
または B) 実際にはタイプを a のままにしてfield
、結果をブーストすることができます。
たとえば、拡張クエリ
john | (john @type family)
OR の両側に john が必要なため、常に john を含む行が存在します。しかし、その両側にあるため、ファミリーにも一致する結果は、より多くのキーワードに一致し、ランクが高くなります。
field-weights オプションを使用して、結果にどの程度影響するかを選択できます。
(最新バージョンの sphinx には MAYBE 演算子があり、これをさらに簡単に行うことができます)
于 2014-06-10T09:25:26.403 に答える