Поиск по параметрам на Sphinx API (php): нужен пинок?

Построил индекс, состоящий из одного текстового поля и нескольких целочисленных.


С поиском по тексту проблем нет: выдачу получаю. Теперь нужно сузить выдачу, установив рамки по целочисленным значениям по аналогии с sql (where `value` between 10 and 20).


У меня два целочисленных поля: value и valuemax. Оба по умолчанию равны 0. Мне нужно выбрать записи, удовлетворяющие условию (value > 30 and valuemax < 100). Но: при этом valuemax может быть не заполнено и равно 0. Как в таком случае включить записи, у которых valuemax не заполнено?


Метод SetFilterRange позволяет отфильтровать одно поле. Допустим, мы задали границы таким образом:

$Sphinx->SetFilterRange('value', 30, 100);
$Sphinx->SetFilterRange('valuemax', 30, 100);


Но как включить в выдачу и те записи, где valuemax = 0 и по сути означает отсутствие границы?
  • Вопрос задан
  • 5559 просмотров
Решения вопроса 1
@klirichek
OR не поддерживается только в правой части (после where). Однако ничего не мешает сделать нужное выражение в select-листе и заалиасить.
(вроде select ... (attr OR attr between 30 and 100) as expr... where expr...)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AloneCoder
@AloneCoder
[object Object]
Копайте в сторону setSelect
www.php.net/manual/en/sphinxclient.setselect.php

$->setSelect("*, (30 to 100) OR (0) as myfilter");
$->setFilter(«myfilter»,array(1));
Ответ написан
dizballanze
@dizballanze
Software developer at Yandex
Можно через sphinxql запрос.
На данный момент правда не поддерживается OR, но, т.к. значения у вас целочисленные и их не очень много, то можно попробовать пока через IN сделать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы