Sphinx SetFilter没有像我期望的那样过滤

时间:2014-05-01 16:38:40

标签: sphinx

我正在使用SetFilter命令:

 $mycategoryids = "345,366,456,444,789,345";

 $cl->SetFilter( 'thecatid', array( $mycategoryids ));

然而,在我得到的结果中,他们都有345作为他们的主要或次要类别,因此看起来因为345是该数组中的第一个数字,所以给予更多(如果不是全部)权重。难道我做错了什么?我认为在该数组中包含所有这些数字只会意味着sphinx只会抓取包含“thecatid”中的其中一个数字的项目,这样如果有这样的项目:

 [thecatid] => Array
                                 (
                                [0] => 444
                                [1] => 552
                                [2] => 554
                                [3] => 566
                            )

然后它仍应显示在结果中,因为444位于项目的'thecatid'数组中,而444也位于过滤器调用中。

我错过了什么吗?

哦,为了确保我的查询是正确的,我在查询中有:

  SELECT u.ID,u.Downloads as downloads, CONCAT_WS(',', u.catID, u.CatID1, u.CatID2, u.CatID3) as thecatid, ...

然后在下面:

 sql_attr_multi = uint thecatid from field;

谢谢!

克雷格

1 个答案:

答案 0 :(得分:1)

 $mycategoryids = "345,366,456,444,789,345";

 $cl->SetFilter( 'thecatid', array( $mycategoryids ));

这不是有效的代码。您需要传递setFilter 数字数组。不是包含单个字符串的数组。

这两个都更好......

$mycategoryids = array(345,366,456,444,789,345);
$cl->SetFilter( 'thecatid', $mycategoryids);

$mycategoryids = "345,366,456,444,789,345";
$cl->SetFilter( 'thecatid', explode(',',$mycategoryids) );