Проверка: символ является буквой?

ScDewt

Новичок
Такой вариант рассматривался, но при хеше пропадает возможность искать без учета регистра, т.к. хеш от `value`='Петр Первый' и `value`='ПЕТР Первый' будет разный. Собственно это преобразование небукв именно для этого и буду делать, чтобы поиск был без учета регистра.
Я же написал - strtolower! Вначале преобразуем текст в нижний регистр, и затем делаем хеш! При поиске точно также - на стороне php преобразуем в нижний регистр, берем хеш и кидаем этот хеш в поиск! Само поле с данными может быть в любом регистре, а вот хеш делать как для хранения так и для поиска только через нижний/верхний регистр!

p.s. тем более что в php5.4 юникод поддержан и проблем с strtolower быть не должно
 

Фанат

oncle terrible
Команда форума
Фанат
кстати по EAV немного оффтопа, как лично вы CAST обходите?
ведь приведение не позволяет пользоваться индексом...
два поля хранить int и char?
а нафига там индексы? выборка идёт по первичному, поиск - свинксом.
в любом случае, в данный момент мы в ужасе валим с EAV на монгу.
 

Redjik

Джедай-мастер
Это когда мы смотрим конкретный товар, а если нужно сделать фасетный классификатор для фильтрации товаров по EAV параметрам, только noSql нормально себя показывает?
 

Shasoft

Новичок
Я же написал - strtolower! Вначале преобразуем текст в нижний регистр, и затем делаем хеш! При поиске точно также - на стороне php преобразуем в нижний регистр, берем хеш и кидаем этот хеш в поиск! Само поле с данными может быть в любом регистре, а вот хеш делать как для хранения так и для поиска только через нижний/верхний регистр!
Насчет преобразовать в нижний регистр - это я не врубился сразу.
`value`='Петр Первый' - длинна 21
md5(`value`='Петр Первый') - длинна 32
Т.е. длинна только увеличилась. Это без учета того, что нужно всё-равно хранить ключ+значение в обычном виде, т.к. из хеша мы его получить не сможем.
Также при хешировании пропадает возможность искать по `value`='Петр*
Попробовал свой алгоритм преобразования небукв. По сравнению со старым алгоритмом ( base64(ключ=значение) ) получился выигрыш почти в 2 раза (476 тыс. строк, выборка по 3 атрибутам. Всего атрибутов в среднем по 5 у каждой строки).
 

Фанат

oncle terrible
Команда форума
Это когда мы смотрим конкретный товар, а если нужно сделать фасетный классификатор для фильтрации товаров по EAV параметрам, только noSql нормально себя показывает?
насколько я помню, до монги поиск по параметрам делался свинксом. но могу ошибаться.
как тебе поможет здесь индекс - я не очень понял. В любом случае, у нас еав - это ТОЛЬКО хранилище.
 

Redjik

Джедай-мастер
насколько я помню, до монги поиск по параметрам делался свинксом. но могу ошибаться.
как тебе поможет здесь индекс - я не очень понял. В любом случае, у нас еав - это ТОЛЬКО хранилище.
чтобы int параметры сортировать, например найти все товары, где обхват талии( при условии, что такой параметр у этого товара есть) > 20, и.т.п
 

fixxxer

К.О.
Партнер клуба
любой универсальный движок все, что для таких вещей предложит - это быстрый фуллскан по памяти
индекс на такие условия построить невозможно (то есть, возможно, но он будет занимать терабайты и толку от него...;))

mysql (даже с engine=memory) плох тем, что фуллскан при отсутствии индексов будет медленным - он не умеет такое сортировать по ходу дела. сфинкс умеет. насчет монги хз, но в принципе, даже если не умеет, на ее мап-редюсе можно изобразить наверное - достаточно взять любой алгоритм потоковой сортировки

насчет монги в качестве основного хранилища у меня предубеждения :) возможно, все уже и хорошо стало
 

Фанат

oncle terrible
Команда форума
fixxxer
погоди, а если индекс по attribute-value?
select entity from eav where attribute='waist' and value='60'

сортировать не будет, но найти-то найдёт?
соответственно, поиск по нескольким параметрам - как в предыдущем вопросе топикстартера
что-то вроде

select entity, count(entity) cnt from eav where (attribute='waist' and value='60') or (attribute='hips' and value='90') group by entity having cnt = 2

или я ещё не проснулся?
 

Redjik

Джедай-мастер
И таки стоп... я все же не понял.
как/на чем/справится ли sphinx?
select entity from eav where attribute='waist' and value > 90

чтобы не делать CAST, который будет по всей таблице пробегаться я бы сделал два поля в EAV - str и int (+ enum или tinyint, чтобы указывать какой тип данных), но если Sphinx умеет без каста такое делать, то жить намного проще...
 

fixxxer

К.О.
Партнер клуба
Я для сфинкса eav разворачиваю в просто "табличку".
 

Redjik

Джедай-мастер
fixxxer
RT индексы это умеют - или по крону?

ЗЫ. офигенская реализация, когда в след раз буду делать - так и сделаю...
 

fixxxer

К.О.
Партнер клуба
Redjik
Я с РТ вообще не работал, если честно. Обычных хватало. В xmlpipe2 можно отдать не только данные, но и структуру индекса ;)
 
Сверху