Sphinx搜索不同的代码不同的结果

时间:2018-05-12 19:36:10

标签: php sphinx

我有一个产品表:

id, code, name, groups, price
1   C001  Name1 71,71,209, 10
2   C002  Name2 76,77,221, 31
3   C003  Name3 171,437,2541, 50

当我尝试使用下面的代码获取结果时,一切正常:

$s->ResetFilters();
$s->SetMatchMode(SPH_MATCH_EXTENDED);
$s->SetLimits($page, 20);
$products = $s->query('@groups 71|77', 'products');

我得到了正确的结果:ID:1和2;

我不明白为什么这段代码不起作用:

$s->ResetFilters();
$s->SetLimits($page, 20);
$s->SetSelect("*");
$s->SetFilter('groups', array(71,77));
$products = $s->query('','products');

在这种情况下,我的“attrs”数组中的产品和“groups”字段每次都是空的。

另一个问题:如何在没有限制指令的情况下从结果中找到“最小”和“最大”价格:

$s->SetLimits($page, 20);

感谢。

1 个答案:

答案 0 :(得分:1)

属性和全文字段在Sphinx中是不同的东西。 query()用于进行全文搜索,只要“groups”是一个全文字段,就可以在那里使用它。如果要将“组”设为属性,则需要:

  1. 使用sql_attr_uint将其定义为配置中的属性, rt_attr_uint,rt_attr_multi或smth else取决于类型 该
  2. 使用SetFilter按属性过滤。
  3. 要查找“最小”和“最高”价格,您可以

    $cl->SetSelect('*,min(price),max(price)');
    

    P.S。我建议您使用SphinxQL,因为它具有更广泛的功能,对于大多数更容易理解和编程。