私はスフィンクスインデックスを持っていますschools
、そして私がクエリをするとき、私はいつも同じ結果を同じ順序で受け取ります。ランク付け、並べ替え、一致の考えられるすべての組み合わせを試しましたが、常に同じ並べ替えが行われました。
私が取得している悪いデータのサンプルは以下のとおりです。
"albany high"
Albany Junior High School | Auckland, NZ | 2001 (shouldn't be first)
Albany High School | Albany, NY | 2001
South Albany High School | Albany, OR | 2001
Albany High School | Albany, CA | 1001 (shouldn't be last)
ご覧のとおり、最高ランクの学校は「アルバニー」という名前の都市になく、下位にある必要がありますが、最低ランクの「アルバニー高校」はそれよりも上位にランク付けされている必要があります。この問題は、多くの検索用語で再現されています。
Sphinxインデックスは次のようになります。
source schools : root
{
sql_query = \
SELECT schools.id, schools.name, schools.state, schools.country, schools.city, \
(select COUNT(*) from user2school WHERE school_id = schools.id) as user_count \
FROM schools
sql_attr_uint = user_count
}
index schools
{
source = schools
path = /var/db/sphinx/data/schools
min_infix_len = 3
infix_fields = name
}
結果を生成するコードは次のとおりです。
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED);
$sphinx->SetRankingMode(SPH_RANK_WORDCOUNT);
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$sphinx->SetFieldWeights(array(
'id' => 0,
'name' => 1000,
'city' => 0,
'state' => 0,
'user_count' => 0
));
Sphinxにカスタムウェイトを認識させるにはどうすればよいですか?私が試したすべての組み合わせは失敗するようです。
編集:
これは、順序は同じですが、設定がまったく異なる別の例です。ここでオンにした唯一のオプションは次のとおりです。
$sphinx->SetRankingMode(SPH_RANK_SPH04);
結果:
"albany high"
Albany Junior High School | Auckland, NZ | 3 (still shouldn't be first)
Albany High School | Albany, NY | 3
South Albany High School | Albany, OR | 2
Albany High School | Albany, CA | 1 (still shouldn't be last)
ご覧のとおり、順序は同じです。これは、私が試したランク付け、並べ替え、および重み付けのすべての組み合わせで同じです。この問題をデバッグするために試すことができるものはありますか?