NOT BETWEEN в «Сфинксе»
Я на этой неделе важный проект сдаю, мы там поиск на «Сфинксе» используем. «Сфинкс» поддерживает специальный язык запросов — SphinxQL, отличная штука, очень похожая на SQL, только, к сожалению, очень урезанный.
Понадобилось сделать запрос, содержащий NOT BETWEEN, а как назло оказалось, что такую конструкцию «Сфинкс» пока (?) не поддерживает. На всех форумах плач и стенания, решения нет.
Зато наткнулся на функцию INTERVAL, которая умеет вычислять не попадает ли указанное в заданный интервал и выдавать, в зависимости от этого ноль или один. Прикинул, должно помочь и действительно, такой запрос вычисляется на ура:
SELECT document_id, INTERVAL(document_id, 1447, 23007) AS intr
FROM cardsmain, cardsdelta
WHERE intr=0
Комментарии 5
Пусть твоя поразительная работоспособность и тяга к новым знаниям не угасает
Ну и да, с этим, как его, с днем.
Мне нужно выбрать записи ID которых не попадает в диапазон от 1447 до 23007. Очевидно же,по-моему.
Польза от INTERVAL в SELECT в том, что это единственное место, где эта функция работает.
Что сделать? Получить тучу данных и убрать ненужное?
Во-первых, неясно зачем это делать на клиенте, если это делать должен поисковый сервер. Я, в принципе, вообще всё на клиенте могу делать, «сфинкс» не нужен. Во-вторых, у «сфинкса» есть ограничение на количество выдаваемых данных. Он не выдаст мне все данные, не сможет, у меня их миллионы. Так что вырезать ненужное я буду ценой недополучения нужного.
Как уж это… Спасибо, что ли.
Комментарий для Евгения Степанищева:
А. Я понял как оно работает. Не обратил внимание что INTERVAL() подставляется в WHERE. Хитро :).