【问题标题】:Sphinx search greater than less condition狮身人面像搜索大于小于条件
【发布时间】:2016-10-03 04:23:30
【问题描述】:

我想在狮身人面像搜索中实现大于和小于条件

我有一张表包含工作

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)条记录,因为在这些记录中,它们之间存在范围。我怎样才能在狮身人面像搜索上实现这个逻辑。如果您有想法,请分享。

有一个 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

但是两条记录都是有效的。

【问题讨论】:

  • 你可以像 $sphinx->SetFilterRange("min_experience", $maxexperience, $minexperience);没有别的,只有一行
  • @BrijalSavaliya 我已经全部做到了,但它不适用于范围的两个领域:(
  • 我认为你应该在这里通过,如果输入是“7”,那么 min_experience > 7 和 max_experience
  • 您可能首先需要指定如何处理所涉及的两个范围(目标范围和经验范围)的比较。在重叠范围(例如,developper minexp=2,maxexp=8)或完全包含范围(developper minexp:4, maxexp=10)的情况下会发生什么。
  • $sphinx->setFilterRange("min_experience", 7 , 8); $sphinx->setFilterRange("max_experience", 7 , 8);

标签: php search sphinx


【解决方案1】:

如果用户搜索有 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'),必须反转逻辑,这意味着使用一些 NOT 规则(最后一个真正的参数)!

【讨论】:

  • 嗨@barryhunter 抱歉回复晚了,如果用户搜索 7 到 11 年,那么这个逻辑将失败。请帮我这样做
【解决方案2】:

其实认为是错误的,这可以用普通的正过滤器来实现

$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 不匹配,因为那里的用户有太多的经验。

(与上一个答案的逻辑相同,但避免使用否定过滤器更容易理解!)

【讨论】:

  • 嗨@barryhunter 抱歉回复晚了,如果用户搜索 7 到 11 年,那么这个逻辑将失败。请帮我这样做
  • 怎么样?第一个过滤器包括用户有足够经验的工作。第二个排除用户有太多(?!)经验的地方
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多