SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.08.2010 00:51:31

Yustas
Участник
Зарегистрирован: 19.08.2010
Сообщений: 2

Полнотекстовый поиск вне html тэгов

Всем привет!

Подскажите пожалуйста, как решить такую задачу:
Имеется таблица, которая содержит контент в формате html.
Нужно искать слова, только если они находятся вне тэгов.

Например: <a title="это слово игнорируем">это слово ищем</a>

Сейчас выполняется такой запрос:

SELECT * FROM pages_index
WHERE MATCH (page_title, page_content) AGAINST ('$search')

Как ограничить зону поиска?

Можно ли сделать так:

SELECT * FROM pages_index
WHERE MATCH (page_title, page_content) AGAINST ('$search') NOT REGEXP '<$search> ' ?

Неактивен

 

#2 19.08.2010 02:24:12

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Полнотекстовый поиск вне html тэгов

Насколько я знаю - нет. Имеет смысл сделать еще одну колонку, в которую класть чистый текст либо при внесении текста, либо периодически по крону. И в ней уже без тэгов искать. Текст чистится элементарной регуляркой \<[^^>]+\>

Неактивен

 

#3 19.08.2010 12:13:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Полнотекстовый поиск вне html тэгов

На самом деле, наверное, можно. Т.е. сначала выбрать строки по полнотекстовому
индексу, а потом дополнительно отсеять через RLIKE. Если лишних строк не очень
много будет выбираться, то overhead будет совсем небольшой, а переделывать не
нужно будет ничего smile

Неактивен

 

#4 19.08.2010 13:17:30

Yustas
Участник
Зарегистрирован: 19.08.2010
Сообщений: 2

Re: Полнотекстовый поиск вне html тэгов

paulus написал:

... Т.е. сначала выбрать строки по полнотекстовому
индексу, а потом дополнительно отсеять через RLIKE. ...

Спасибо за ответ! Насколько я понимаю, RLIKE это синоним REGEXP?
Как же будет выглядеть синтаксис такого запроса, как у меня с добавлением REGEXP в конце или нет?

Неактивен

 

#5 19.08.2010 13:26:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Полнотекстовый поиск вне html тэгов

EXPLAIN посмотрите от запроса. Если индекс не хочет использовать — то надо будет
через подзапрос сделать. Т.е. что-то вида
SELECT * FROM ( SELECT по индексу ) t WHERE page_conent NOT RLIKE '…'

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson