mysql и полнотекстній поиск

12
verhmax
На сайте с 01.12.2005
Offline
191
659

добрый день. есть вопрос. создал полнотекстный поиск по полю в таблице. а как сделать чтоб искало сразу в нескольких полях? если стоит в одном поле, то ищет, если я добавил к полнотексту ещё одно поле, то выдает ошибку.

Заранее спасибо!

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Так пробовали добавлять?

CREATE FULLTEXT INDEX index_name ON table_name(col1, col2, col3);

update: исправил запрос...

verhmax
На сайте с 01.12.2005
Offline
191
#2

вот так и создавал, только в index_name указал такоеже имя как и в одном из полей col1

тоесть так

CREATE FULLTEXT INDEX col1 ON table_name(col1, col2, col3);

может это не правильно?

а что ещё там с апдейтом надо сделать?

Dreammaker
На сайте с 20.04.2006
Offline
569
#3
Dreammaker:
а что ещё там с апдейтом надо сделать?

то я добавил FULLTEXT в запрос, а то первый раз когда дописал, пропустил его.

verhmax
На сайте с 01.12.2005
Offline
191
#4

Dreammaker, так а в чем может быть прикол? может мне исправить название полученого фултекста, ато оно совпадает с названием одного из полей

[Удален]
#5

$text = $_GET('text')
$sql = "SELECT COUNT(*) FROM table WHERE lower(col1) LIKE lower('%$text%') OR lower(col2) LIKE lower('%$text%') OR lower(col3) LIKE lower('%$text%')";

Может всёже так будет лучше?

verhmax
На сайте с 01.12.2005
Offline
191
#6

KosoyRoman, не знаю ,мне посоветовали сделать полнотекстный поиск, в базе у меня 3 млн записей. очень тормозила:(

Dreammaker
На сайте с 20.04.2006
Offline
569
#7

verhmax,

только что у себя попробовал



CREATE FULLTEXT INDEX name on catalog_site(name, keywords)


SELECT *, MATCH name, keywords AGAINST ('сайт') as relev FROM
catalog_site ORDER BY relev DESC

Ищет, ошибок не выдаёт.. Может у вас одно из полей имеет название зарезервированного слова?

verhmax
На сайте с 01.12.2005
Offline
191
#8

Dreammaker, действительно, работает, но почему так долго? из 1,5 млн записей найти слово заняло 12 сек :(

Dreammaker
На сайте с 20.04.2006
Offline
569
#9

LIMIT задавали ? у меня это по идее общий такой себе вид..

DI
На сайте с 03.01.2007
Offline
123
#10
KosoyRoman:
Может всёже так будет лучше?

С таким вариантом, думаю, результата вообще можно не дождаться:)

Dreammaker:
LIMIT задавали ?

LIMIT не всегда поможет, т.к. в некоторых случаях он работает в последнюю очередь, т.е. сначала выбираются все совпадения (основное время выполнения), а потом уж делается срез в соответствии с LIMIT.

Надо анализировать сам запрос в целом - может будет проще сделать покрывающий индекс (если он еще не такой), когда все поля таблицы, участвующие в запросе, проиндексированы. Такие вопросы тяжело решать, когда они вырваны из контекста.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий