狮身人面像搜索大于条件

时间:2016-06-03 07:40:18

标签: php search sphinx

我想在sphinx搜索中实现大于和小于条件

我有一个表包含作业

id   | job_title      | min_experience | max_experience 
101  | php Developer  | 4              | 10
102  | PHP Developer  | 6              | 9
103  | PHP Developer  | 4              | 5

如果用户搜索7年至8年的经验作业,则会显示2(101和102)条记录,因为在这些记录范围内介于它们之间。如何在sphinx搜索上实现此逻辑。如果你有想法分享请。

有一个setFilterRange范围,但它可以在一个字段上工作。

如果我将实施此

$sphinx->setFilterRange("min_experience", 7 , 8);  
// no result  because both are less than 7

$sphinx->setFilterRange("min_experience", 7 , 8); 
// no result will display because max experience is 10 or 9

但这两个记录都是有效的。

3 个答案:

答案 0 :(得分:0)

  

如果用户搜索7年至8年的经验

解决逻辑问题令人困惑,但认为这样可行......

$sphinx->setFilterRange("max_experience", 0 , 6, true); 
$sphinx->setFilterRange("min_experience", 8 , 900000, true);
说你7-8的经验,说你不想用0-6岁的上限。即排除经验不足的工作。即第一条规则不包括#103

而你并不想要太少,所以第二条规则将排除一项工作说10年> 15年,因为用户体验太低。

注意:逻辑上可以用' OR'来实现规则,但是不能用sphinx(它只有' AND&## 39;),必须反转逻辑,这意味着使用一些NOT规则(最后一个真正的参数)!

答案 1 :(得分:0)

实际上认为错了,这可以用正常的正滤波器来实现

$sphinx->setFilterRange("min_experience", 0 , 7);  //7 is lower user experience
$sphinx->setFilterRange("max_experience", 8 , 900000);  // 8 is the upper upper

这表示匹配作业,最低需要0到7之间。用户有7,所以匹配任何需要7或更少的工作。 如果用户有5,它将匹配101和103,因为他们只需要4,但不需要102,因为它需要6。

最大过滤器说,8或更多。用户有8,所以匹配101和102,这是好的,因为8小于9/10。 再次103不匹配,因为用户有太多的经验。

(与前一个答案相同的逻辑,但避免负面过滤器更容易理解!)

答案 2 :(得分:0)

我有一个类似的案例,但价格很高。这对我有用。

if ($min_price - 1 > 0) {
    $sph->setFilterRange('price_min', 0, $min_price - 1, true);
}
$sph->setFilterRange('price_max', $max_price + 1, 10 ** 10, true);