исключение html кода из поиска

MailRes

Новичок
исключение html кода из поиска

Всем привет!

Написал скрипт поиска, ищет инфу он из таблиц БД MySQL. Вроде всё в норме, ток появилась заморочка, в таблицах БД есть html код, и например в окне поиска набрать <table>, <p> или что-нить подобное, то он конечно в результатах выводит все ссылки на страницы где присутствует данный код.
Вопрос: как исключить из поиска весь HTML код, а то что-то не хочется вручную исключать из поиска html теги и прочую такую лабуду.

Ищет он у меня по такому принципу:
PHP:
$query = "select * from table where field1 like '%$trimmed%' OR field2 like '%$trimmed%'";
очень нужна помощь :)

p.s. в php я новичек
 

Fortop

Новичок
[m]strip_tags[/m] для строки поиска.

Но почему в БД появился html - это тоже интересный вопрос.
 

MailRes

Новичок
сайт делаю на джумле, у неё таблица есть jos_content, там в поле introtext содержится весь html код страницы, который джумла использует для вывода страницы пользователю
 

HraKK

Мудак
Команда форума
Для этих целей надо искать не в коде контента, а делать своего паука который будет пробегать по страницам и идексировать контент.
 

Fortop

Новичок
Я не в курсе как дело обстоит в Joomla, но если страницы не кешируются в файлы, то у тебя даже при небольшой посещаемости БД просядет под такими поисковыми запросами.

Можно посмотреть вот это
http://www.google.com/cse/?hl=ru
или это
http://framework.zend.com/manual/en/zend.search.lucene.overview.html

И если, вдруг, хостинг планируется не shared, то
http://sphinxsearch.com/
 

MailRes

Новичок
Стандартный модуль поиска и всякие там компоненты поиска не подходят, т.к. у меня есть страницы, содержимое которых выводится из таблиц БД, естественно стандартные модули их не ищут, вот и приходится свой поиск мудрить :)

HraKK, есть готовые пауки?? я б его подредактрировал чтоб он по моим таблицам ходил ;)
 

Fortop

Новичок
Автор оригинала: MailRes
всякие там компоненты поиска не подходят, т.к. у меня есть страницы, содержимое которых выводится из таблиц БД
Походил по ссылкам, для начала, узнал бы много интересного и полезного

Автор оригинала: MailRes
HraKK, есть готовые пауки?? я б его подредактрировал чтоб он по моим таблицам ходил ;)
Пауки ходят не по таблицам, а по страницам.
 

HraKK

Мудак
Команда форума
Fortop
Пауки могут и по таблицам)) Если надо только по контенту
 

MailRes

Новичок
то у тебя даже при небольшой посещаемости БД просядет под такими поисковыми запросами.
Это почему?

strip_tags - мб и подходит, но что-то пока не получилось у меня вырезать им теги из поиска... :(
 

Fortop

Новичок
Потому что LIKE не использует индексы. Тебе нужно ставить MyISAM и FULLTEXT на поля.

А что у тебя могло не получиться с strip_tags - для меня загадка.
 

MailRes

Новичок
PHP:
$var = @$_GET['searchtxt'] ;
$trimmed = trim($var); 
...
$query = "select * from table where field1 like '%$trimmed%' OR field2 like '%$trimmed%'";
тип искомого поля по умолчания стоит mediumtext, страшно его менять, вдруг всё упадет :(

А с strip_tags так и не разобрался, т.к. как понял strip_tags убирает html теги, но где убирать? Как например с моим поиском "where field1 like" в поле field1 выбирается любой совпадение с переменной $trimmed, чет не могу понять как выдернуть все содержимое поля field1, затем удалить все теги, а только потом уже по оставшейся части искать.
 

Fortop

Новичок
Было же желание убрать теги из окна поиска?
и например в окне поиска набрать <table>, <p>
Вот для него и применять strip_tags прежде чем делать запрос.

Если есть другое желание - не учитывать теги из страницы в БД, то http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Но елки-палки, это удаление гланд через задницу
 

MailRes

Новичок
HraKK, почти все, там где есть теги <table> </table> они буду в результате поиска :(

Вот для него и применять strip_tags прежде чем делать запрос.
Fortop, не получится, ведь запрос уже ищет по этому полю, и не важно есть там тег или нет, хоть набери "<" или ">" или "</" :( все равно выведется :(
 

Dreammaker

***=Ф=***
Теоретически средний вариант между созданием поисковика и FULLTEXT - это сделать отдельное поле куда заносить почищенные данные, наложить FULLTEXT и искать уже по нему. Но насколько это оправданно, тут уже не совсем понятно.
 

MailRes

Новичок
Ребята, всем спасибо за советы-ответы, нашел решение: (вставил в фрагмент когда где проверяется найдено что то или нет)
PHP:
$search=strip_tags($tablerows[4]); //присваиваю перемнной значение поля с удалением тегов
$search=strtolower($search); //перевожу в нижний регистр
$trimmed=strtolower($trimmed); //перевожу в нижний регистр
$pos=strpos($search, $trimmed, 0); //ищу в строке искомое значение
Думаю что все корректно сделал, теги теперь не ищутся))))

p.s.
$search - строка в которой нужно произвести поиск
$trimmed - запрос поиска переведенный в нижний регистр
$pos - переменная отвечающая, найдено то что запрошено или нет :)
Жду ваших комментариев))

-~{}~ 14.02.10 03:48:

Потому что LIKE не использует индексы. Тебе нужно ставить MyISAM и FULLTEXT на поля.
Т.к. я новичек в этом деле, не вижу разницы между прямым запросом и индексом...
Чем прямой запрос хуже индекса?

p.s. раньше на эту тему не заморачивался, теперь обращаю внимание на "поиск по сайту", очень сильно не нравится поиск, который долго обрабатывается, на моём примере мне пока нравится быстродействие :)
 
Сверху