Дополнительный улучшенный поиск по множественным ТВ
Closed this issue · 10 comments
Наткнулся на интересный вариант поиска по целым словам, который отлично подойдет для фильтра по нашим ТВ, в первую очередь.
SELECT * FROM modx_site_tmplvar_contentvalues WHERE REPLACE(
value, '||', ' ') REGEXP '[[:<:]]10[[:>:]]'
Отлично ищет строки 4,7,10,11,116 но не строки 100,7,2010
SELECT * FROM modx_site_tmplvar_contentvalues WHERE REPLACE(
value, '||', ' ') REGEXP '[[:<:]]197[[:>:]]'
Ищет 197 или 105||197, но не ищет 1197 и 1978||1
Можно потестировать и добавить еще один вариант фильтра для нормальной выборки по множественному тв.
Вопрос практически снят, оно работает нормально и в варианте
SELECT * FROM modx_site_tmplvar_contentvalues WHERE value REGEXP '[[:<:]]197[[:>:]]'
т.е. без замены || на пробелы. А значит можно реализовать через стандартный фильтр regexp https://github.com/AgelxNash/DocLister/blob/master/assets/snippets/DocLister/core/filterDocLister.abstract.php#L170-L172, если эти двойные кавычки не помешают и не сойдут за объявление сниппета. Но все-таки аналог фильтра containsOne (выбор многих из многих) по данному принципу не помешал :)
Интересно, на каком объеме данных, сайты с такими фильтрами начнут забигаться?
В общем-то сейчас есть автозагрузка фильтров, так что можно не пихать в комплектные такую экзотику.
Не такая уж и экзотика, если надо найти размер L, когда в tv size записаны строки
L, XL, XXL
S,L,XL
L|XL||XXL
XL||XXL
XL, XXL
:)
А насчет производительности - всегда можно поставить птичку, что именно использовать для фильтрации. В магазине на 500-1000 товаров особой разницы, я думаю, не будет, а вот точность поиска (чтобы вместе с L не выдавало и все XXL/XL) тут имеет больший приоритет. Для тех же, кто хочет "и много и быстро и точно" - тоже есть свой вариант - прикупить хостинг помощнее :)
Частая практика, такая проблема с размерами и с цветами а это обой магазин с одеждой да и не только
Точно, blue от deepblue он тоже отличит :))))
Так и до фильтрации на PHP в духе дитто дойдем.
Я тоже считаю, что разработчиков нужно сразу направлять в сторону правильной реализации (тот же TagSaver в помощь). А эти полумеры только усугубляют ситуацию, когда проект встает на рельсы.
Да нет тут полумеров на самом деле, хороший базовый функционал получается :) и работает из коробки в eFilter
А сейчас приходиться костыли городить каждый раз в подобной ситуации уже 3 раза делал за последние пол года костыли :)
По уму у нас eFilter чуть ли не единсвенный простой фильтер функциональный и доступный для программеров с не очень большим скилом . Так то понятно что можно все писать с нуля