Форум Рідного Міста

Пошук у MySql

Mary Kravets - 22-6-2007 у 14:44

Відомо, що в MySql можна шукати по частинах слів. Коли потрібно знайти по першій частині слова, запит пошуку формується приблизно так:

SELECT name, addr FROM posts WHERE MATCH (name,addr) AGAINST ('слово*' IN BOOLEAN MODE)

А що робити, коли потрібно знайти по закінченню слова( типу на запит "ицтво" результатами будуть "будівництво" і т.п. )?
Перечитала купу доки і так і не знайшла.
Правда, є варіанти типу LIKE або REGEXP...
Поділіться, будь-ласка, досвідом. Буду дуже вдячна :)

Юрій Сєров - 22-6-2007 у 15:04

А чим Вам не подобається ?
SELECT name, addr FROM posts WHERE name LIKE "%ицтво"

Mary Kravets - 22-6-2007 у 15:09

та я так і думаю, просто підозри були, що в запиті пошуку це можна зробити. + пошук працює швидше ніж LIKE

Mary Kravets - 22-6-2007 у 15:16

+ до того всього LIKE зручний тільки у випадку малої к-сті полів. А якщо таким чином потрібно шукати по 10 полям? Тут вже буде тормозить :) Або в випадку LIKE і 10 полів розбивати пошук по полях, наприклад : юзер з випадного списку вибирає, шукати по назві\адресі чи по опису.

Юрій Сєров - 22-6-2007 у 15:24

Можливо тоді краще загнати всю таблицю в масив і в ній вже шукати засобами PHP чи Perl-а ?

Mary Kravets - 22-6-2007 у 15:34

це буде неефективно при великій кількості рядків у таблиці. В мене десь під 5000. Краще LIKE :) + там зберігаються трошки довгі тексти... Короче багато памяті пхп забере :)
Але мені дивно: ну як же команда Mysql додумалась зробити пошук по початку слова (слово*) і не додумалась зробити по закінченню (*слово), або так як в like %слово%. Мабуть така фіча ще у списку TODO :)

Андрій Пелещишин - 22-6-2007 у 16:01

Цитата:
ну як же команда Mysql додумалась зробити пошук по початку слова (слово*) і не додумалась зробити по закінченню (*слово),

Думаю, команд MySql ще дуже багато чого не зробила, щоби хоча би наблизитися до нормальних СКБД.
Користайтесь LIKE - принаймні збережеться імовірність переносимості коду на інші платформи.

Тарас Гулка - 22-6-2007 у 22:11

Якщо хочеться наваротів і великої швидкості то можна використовавати зовнішні рішення

Наприклад, Sphinx- open-source SQL full-text search engine ( http://sphinxsearch.com/ ) . Сам не користав, але читав дуже позитивні відгуки.