1

私はスフィンクス検索にかなり慣れていないので、クエリに問題があります。

私は次の設定を持っています:

sql_attr_uint = user
sql_attr_uint = category
sql_field_string = title
sql_field_string = description

クエリは次のようになります

$sf->setMatchMode(SPH_MATCH_ANY);
$sf->setFilter("user", array("1033"));
$sf->setFilter("category", array("9"));
$sf->setFieldWeights(array("user"=>150,"category"=>50,"title"=>75,"description"=>75));

$result = $sf->query('my test query',"test");

いずれかのフィルターに一致するすべての行をクエリし、一致するフィルターの数で並べ替えたいと思います。優先ユーザー > タイトル = 説明 > カテゴリ

基本的に、一致しない行を削除するのではなく、フィルターを重み付けする必要があります。

ありがとうございました

4

1 に答える 1

1

基本的に、一致しない行を削除するのではなく、フィルターを重み付けする必要があります。

基本的には可能ですが、困難を伴います。

uint 属性をフルテキスト キーワードに変換するだけのほうがよいでしょう。

sql_attr_uint を sql_field_string に変更して、フィールドにします (行を削除してデフォルトでフィールドにするのではなく、それらを属性として保持したい場合)

次に、拡張構文を使用してフィルタリングできます

$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->Query('"my test query"/1 | (@user 1099) | (@category 9)',"test");

(これもクォーラム構文を使用して ANY クエリをエミュレートしています)

于 2013-09-03T10:44:35.170 に答える