我想在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
但这两个记录都是有效的。
答案 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);