Search 斯芬克斯忽略排名,总是按相同的顺序排序
我在Search 斯芬克斯忽略排名,总是按相同的顺序排序,search,full-text-search,sphinx,Search,Full Text Search,Sphinx,我在学校上有斯芬克斯索引,当我进行查询时,我总是以相同的顺序收到相同的结果。我尝试了所有可以想象的排名、排序和匹配的组合,总是得到相同的排序 下面是我得到的坏数据示例: "albany high" Albany Junior High School | Auckland, NZ | 2001 (shouldn't be first) Albany High School | Albany, NY | 2001 South Albany High School | Alban
学校
上有斯芬克斯索引,当我进行查询时,我总是以相同的顺序收到相同的结果。我尝试了所有可以想象的排名、排序和匹配的组合,总是得到相同的排序
下面是我得到的坏数据示例:
"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)
正如你所看到的,排名最高的学校不在一个名为“奥尔巴尼”的城市,而应该排名较低,而排名最低的“奥尔巴尼高中”应该排名较高。这个问题会在许多搜索词中重复出现
斯芬克斯指数如下所示:
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->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)
如您所见,顺序是相同的。我尝试过的排名、排序和权重的每个组合都是相同的。我可以试着调试这个问题吗?设置字段权重中的0看起来很奇怪。只需注意要将权重设置为的字段,或使用1作为默认值。我怀疑0将导致问题 怀疑SPH_RANK_SPH04最适合这种特殊情况
也不应该需要你的setSelect你的SetFieldWeights中的0看起来很奇怪。只需注意要将权重设置为的字段,或使用1作为默认值。我怀疑0将导致问题 怀疑SPH_RANK_SPH04最适合这种特殊情况
也不应该需要您的setSelect也许这是应用程序中的一个逻辑错误。Sphinx为您提供了一个ID列表,您可以使用该列表从原始数据库检索数据。也许您没有正确地排序这些行 我刚刚尝试将您的数据插入测试RT索引(包括一个字符串属性,以便可以查看数据)
更改排名模式确实有效 这可能是应用程序中的逻辑错误。Sphinx为您提供了一个ID列表,您可以使用该列表从原始数据库检索数据。也许您没有正确地排序这些行 我刚刚尝试将您的数据插入测试RT索引(包括一个字符串属性,以便可以查看数据)
更改排名模式确实有效 我用另一个例子更新了我的问题。是否有我可能遗漏的有助于调试此问题的内容?特别是,我不明白斯芬克斯为什么选择这些权重值。我用另一个例子更新了我的问题。是否有我可能遗漏的有助于调试此问题的内容?特别是,我不明白斯芬克斯为什么选择这些权重值。你是对的,这是我的应用程序中的一个错误。我使用了一个类似于
SELECT*的查询,该查询来自id位于(2,4,3,1)
的学校。此查询返回按ID排序的数据,而不是按传递的相同顺序返回的数据。没错,这是我的应用程序中的一个错误。我使用了一个类似于SELECT*的查询,该查询来自id位于(2,4,3,1)
的学校。此查询返回按ID排序的数据,而不是按传入的相同顺序的数据。
mysql> insert into rttest values (1,'Albany Junior High School','Auckland','NZ','Albany Junior High School, Auckland, NZ');
... etc ...
mysql> select * from rttest where match('albany high');
+------+--------+-----------------------------------------+
| id | weight | value |
+------+--------+-----------------------------------------+
| 2 | 3267 | Albany High School, Albany, NY |
| 3 | 3267 | South Albany High School, Albany, OR |
| 4 | 3267 | Albany High School, Albany, CA |
| 1 | 1304 | Albany Junior High School, Auckland, NZ |
+------+--------+-----------------------------------------+
4 rows in set (0.15 sec)
mysql> select * from rttest where match('albany high') option ranker=sph04;
+------+--------+-----------------------------------------+
| id | weight | value |
+------+--------+-----------------------------------------+
| 2 | 12267 | Albany High School, Albany, NY |
| 4 | 12267 | Albany High School, Albany, CA |
| 3 | 10267 | South Albany High School, Albany, OR |
| 1 | 6304 | Albany Junior High School, Auckland, NZ |
+------+--------+-----------------------------------------+
4 rows in set (0.00 sec)
mysql> select * from rttest where match('albany high') option ranker=wordcount;
+------+--------+-----------------------------------------+
| id | weight | value |
+------+--------+-----------------------------------------+
| 2 | 3 | Albany High School, Albany, NY |
| 3 | 3 | South Albany High School, Albany, OR |
| 4 | 3 | Albany High School, Albany, CA |
| 1 | 2 | Albany Junior High School, Auckland, NZ |
+------+--------+-----------------------------------------+
4 rows in set (0.00 sec)