Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск неполных сопадений, REGEXP/RLIKE/LIKE что применить? 
V
    Опции темы
FiMa1
Дата 4.3.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 1
Всего: 6



Ребята, всем привет!

Так как я являюсь далеко не экспертом в MySQL, то мне нужна ваша помощь.

Есть таблица, в которой в поле word содержатся слова и словосочетания, например вида:
dog
dog anchor
hunting dog
cat

Мне нужен запрос, который при поиске по запросу "dog" извлек бы строки 1-3 (dog, dog anchor, hunting dog).
Я не нашел другого способа, кроме как использовать REGEXP:
Код

SELECT * FROM words WHERE word REGEXP '\s?dog\s?'

Меня смущает, что при подобном использовании MySQL не будет использоваться индекс, сам REGEXP то же очень медленный в работе.

Есть ли у вас какие-либо другие предложения? Может как-то можно и выгоднее будет здесь использовать LIKE, RLIKE или что-то еще?

Заранее благодарю за любую помощь!

Это сообщение отредактировал(а) FiMa1 - 4.3.2010, 22:43
PM   Вверх
skyboy
Дата 4.3.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(FiMa1 @  4.3.2010,  15:11 Найти цитируемый пост)
жет быть как-то можно и выгоднее здесь использовать LIKE, RLIKE или что-то еще?

индексы не будут использоваться. 
надо нормализовать структуру. добавить таблицы с отдельными словами(idword + word) и связь между фразой и словом(idphrase + idword)
тогда поиск будет происходить через обычный join по числовому полю.
если речь идет именно о поиске без каких-то специфических требований, то есть индексаторы, которые как раз и построят базу слов + связь между словами и фразами на основании, например, sql-запроса. глянь к примеру sphinx
PM MAIL   Вверх
FiMa1
Дата 4.3.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 1
Всего: 6



Цитата(skyboy @ 4.3.2010,  17:04)
индексы не будут использоваться. 
надо нормализовать структуру. добавить таблицы с отдельными словами(idword + word) и связь между фразой и словом(idphrase + idword)
тогда поиск будет происходить через обычный join по числовому полю.
если речь идет именно о поиске без каких-то специфических требований, то есть индексаторы, которые как раз и построят базу слов + связь между словами и фразами на основании, например, sql-запроса. глянь к примеру sphinx

skyboy, спасибо за помощь!

Почитал про sphinx - очень и очень интересная вещь. Но мой хостинг не подразумевает установку/запуск программ, увы. Может быть потом это выльется в значительную переделку всего, если решу хостить себя сам или прикуплю VDS.

Ну что ж буду думать над нормализацией структуры базы данных. Хотя проект уже не в начальной стадии, база уже, казалось, была оформлена.

Еще раз спасибо!

Это сообщение отредактировал(а) FiMa1 - 4.3.2010, 21:42
PM   Вверх
FiMa1
Дата 5.3.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 1
Всего: 6



Удалено...

Это сообщение отредактировал(а) FiMa1 - 6.3.2010, 07:34
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.