пойск по labels с интерфейсом

  • Автор темы Автор темы WMix
  • Дата начала Дата начала

WMix

герр M:)ller
Партнер клуба
есть желание лопатить таблицу по лэйблам. те существует 2 таблички одна основная ID,NAME
и вторая labels - на каждую строчку основной таблицы приходятся несколько лэйблов ID,PARENT,LABEL

желание быстро найти нужную строчку вводя или нажимая самые часто употребляемые тэги и таким образом сужать пойск.

может кто знает готовое независимое решение или библиотеку ?
 
Приведи пример исходных данных и желаемого результата. Пока не очень понятно, но попахивает Сфинксом.
 
Приведи пример исходных данных и желаемого результата. Пока не очень понятно, но попахивает Сфинксом.
Не понятно где вы там запашок сфинкса увидели? т.к. все делается нативно и просто как "две копейки".
 
исходных данных еще нет, но это будет таблица таможенных кодов. задача быстро выискивать правильный код. идея была разбить описание на слова тэги и слепить близкий к удобному интерфейсик. те. это требует минимум затрат. и польза еще не извесная.
таможенный код это 9-12 значный номер

http://www.tks.ru/db/tnved/tree

6505001000; Шляпы и прочие головные уборы трикотажные машинного или ручного вязания, или изготовленные из цельного куска (но не из полос) кружева, фетра или прочего текстильного материала, с подкладкой или без подкладки или с отделкой или без отделки; сетки для волос из любого материала, с подкладкой или без подкладки или с отделкой или без отделки: из фетра мехового или фетра из шерсти и меха, изготовленные из шляпных заготовок, колпаков или плоских заготовок товарной позиции
 
WMix продемонстрируйте что вы имеете в примерах? и где у вас не получается? а то повторное описание задачи не отличается от первого описания и в ровном счете несет в себе нулевую смысловую нагрузку.
 
если я буду писать, у меня все получится. задача не писать, а взять готовый инструмент и попробывать, имеет ли вообще смысл писать, bzw. оптимировать!
 
Ragazzo
только никому не говори, что не смог-бы написать такой поисковик
 
Если имеется ввиду fuzzy search как в Sublime Text 2, то алгоритм самому бы хотелось увидеть, там круто. :)

Если ограничится поиском просто по началу слов входящих в текст, то можно например так:
1. В строке поиска все кроме букв и цифр меняем на пробелы:
PHP:
$q = preg_replace("%[^0-9a-zA-Zа-яА-Я\s]%iu", " ", $_REQUEST['search']);
$q = preg_replace("%\s{2,}%u", " ", $q);
2. Теперь пробел это разделитель получаем слова:
PHP:
$searchwords = explode(" ",$q);
3. По словам формируем наше условие:
PHP:
$w = '1=1';
foreach($searchwords as $key => $value) {
	$searchword = mb_strtoupper($searchwords[$key]);
	$w .= ' and (';
	$w .= 'ucase(label) rlike \'([^0-9a-zA-Zа-яА-Я]+' . $searchword . '.*|^' . $searchword . '.*)\'';
	$w .= ')';
}

$query = 'select * from table2 where ' . $w . ' limit 15;
...

Теперь можем написать: шляпы машинного сетки
и найдет 6505001000.

match against в MyIsam не удобный, нельзя влиять на разделители (например, не найдет СО-2, если в тексте СО 2).
Сфинкс - наврено да, но в небольших проектах - это сильно круто. :)
 
WMix с вашим описанием рекомендую писать самому, тем более работа простая. При дальнейшем рефракторинге, при усложнении функциональности можно будет уже задуматься о сфинксе и подобных ему.
 
Тугай
спасиб, я всеже надеялся на готовую штучку. чтоб время на эту хрень не тратить. нашел модуль для юмлы который можно использовать, все одно быстрее чем писать.

кстати очень прикольно. медленно не будет?
PHP:
' and ( ucase(label) rlike \'([^0-9a-zA-Zа-яА-Я]+' . $searchword . '.*|^' . $searchword . '.*)\' )'
 
WMix
да, не, просто фраза так звучала... пропитанная мудростью и оптытом чтоли :D дело мастера боится и т п ;)
p.s. не буду больше тут оффтопить :)
 
WMix
Порядка 20000 записей, при вводе задержка 250мс перед отправкой ajax'a, отзывается через 1-2 сек, вполне нормально.
 
Сверху