Sphinx - 按多个属性排除过滤器

时间:2012-12-18 17:44:00

标签: php indexing sphinx

我正在查询包含用户创建的记录的索引。由于我的应用程序可以有多种类型的用户,因此该表具有CreatedByType和CreatedById。

我想排除某个特定用户创建的结果。

// Exclude $userId from the results
$this->Client->SetFilter('CreatedById', $userId, true);

但是,这显然会排除ID为$userId的所有用户类型的结果。同样地:

// Exclude $userId from the results
$this->Client->SetFilter('CreatedByType', $userType, true);

将排除$userType类型的所有用户的结果。

如何将两个属性组合成一个约束并对它们进行AND查询?

由于

1 个答案:

答案 0 :(得分:1)

可以计算虚拟组合属性,并对其进行过滤。

$this->Client->setSelect("*, IF(CreatedById=$userId,1,0)+IF(CreatedByType=$userType,1,0) as myfilter");
$this->Client->setFilterRange('myfilter',0,1);

(0表示既不匹配,1表示匹配,2表示匹配。所以setfilterrange,排除两者匹配的文档!)