Sphinx Search разные результаты поиска кода - PullRequest
0 голосов
/ 12 мая 2018

У меня есть таблица продуктов:

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 каждый раз пустое.

И еще один вопрос: как я могу найти "минимальную" и "максимальную" цену из результата без указания предела:

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

Спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Атрибуты и полнотекстовые поля - разные вещи в Sphinx. query () предназначен для выполнения полнотекстового поиска, и, если «groups» - это полнотекстовое поле, вы можете использовать его там. Если вы хотите сделать «группы» атрибутом, вам необходимо:

  1. определите его как атрибут в вашей конфигурации, используя sql_attr_uint, rt_attr_uint, rt_attr_multi или что-то еще в зависимости от типа что
  2. используйте SetFilter для фильтрации по атрибуту.

Чтобы найти "минимальную" и "максимальную" цену, вы можете сделать

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

P.S. Я рекомендую вам использовать SphinxQL, поскольку он обладает более широкими функциональными возможностями, для большинства из которых его легче понять и программировать.

...