Pull to refresh

Comments 12

Очень в тему, только вчера задавался подобным вопросом насчет «ИЛИ», на будущее (пока это условие не требуется, но уже проектируется задача, в которой оно точно понадобится). Только я использую не SphinxQL, а API. Как бы вы рекомендовали сделать аналогичное через Sphinx API?
В общем постановке вопрос звучит, наверно, таким образом: как в Sphinx API делать запросы с использованием вычисляемых на лету (IF(`price` > 100, 1, 0) + IF(`price` = 0, 1, 0) AS `pricematch`) полей?
А разве трансформировать (A || B) в !(!A AND !B) в сфинксе нельзя?
Можно, но трансформацию (вычисление) нужно делать в секции SELECT. При попытке использовать в выражении WHERE получаю ошибку:

ERROR 1064 (42000): sphinxql: syntax error, unexpected '(', expecting IDENT (or 5 other tokens) near '(NOT(NOT price >=100 AND NOT price=0))'

В секции SELECT ваш вариант трансформации отрабатывает отлично!
Я бы предположил, что фильтр по результатам выражения из списка полей происходит уже после выборки из индекса, так что вам стоит быть осторожным с таким подходом, особенно если это единственное условие выборки и объем данных значителен.
О, ваш пример намного лучше, спасибо!
Будьте добры, подскажите можно ли и, если да, то приведите пример как, использовать в выражениях IN. Например, это:

SELECT organizerid = 17320 OR 17320 IN (customerids) AS c1
FROM `NotCompletedTenders`
WHERE c1 = 1
OPTION ranker = none

выдает ошибку:

{«sphinxql: syntax error, unexpected IN, expecting FROM or ',' near 'IN (17320) AS c1 FROM `NotCompletedTenders` WHERE c1 = 1 OPTION ranker = none' (42000)»}
Не нашли ли ответ на данный вопрос. Испытываю подобные затруднения с IN, уже мозг сломал — перепробовал буквально все возможные варианты.
Дело в том, что я использоваю в качестве клиента SphinxConnector, это очень удобная вещь, но только для .NET. Так вот, на тот момент он неверно генерировал SphinxQL для «in» в «select».

Вот здесь мне ответили, и все встало на свои места: sphinxsearch.com/forum/view.html?id=12798. Зарепортил баг, и теперь он генерит: SELECT organizerid = 17320 OR IN(customerids,17320) AS c1.
Спасибо, я вчера сам независимо разобрался — все-таки не хватает документации подробности и примеров.
Они, я так понимаю, на поддержке основные деньги делают(= И форум, конечно, спасает: есть там один barryhunter, очень быстро и подробно отвечает на вопросы.
Sign up to leave a comment.

Articles

Change theme settings