Структура на таблица, Full Text Search и references

emagi

Registered
Става дума за следното:
[sql]
DROP TABLE IF EXISTS `Description`;

CREATE TABLE `Description` (
`OffersId` int(11) UNSIGNED NOT NULL DEFAULT '0',
`LanguageId` int(11) UNSIGNED NOT NULL DEFAULT '0',
`Description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
FULLTEXT INDEX `IDX_Description`(`Description`),
UNIQUE INDEX `IDX_OffersId_LanguageId`(`OffersId`, `LanguageId`),
CONSTRAINT `Ref_19` FOREIGN KEY (`OffersId`)
REFERENCES `Offers`(`OffersId`)
ON DELETE CASCADE
ON UPDATE NO ACTION,
CONSTRAINT `Ref_20` FOREIGN KEY (`LanguageId`)
REFERENCES `Language`(`LanguageId`)
ON DELETE CASCADE
ON UPDATE NO ACTION
)
ENGINE=INNODB
CHARACTER SET utf8
COLLATE utf8_unicode_ci ;
[/sql]

Понеже машината за съхрание е тип INNODB, то не може да ползвам FullTextSearch, а ако го сменя на MYISAM не мога да ползвам REFERENCES
Идеи?
 
Само да кажа,че тоя full text search е малк прехвален според мен.
На единия сайт ползвам просто LIKE %$word%
а на другия full text search и да ти кажа и двата си имат + и - .

Класирането и самото търсене ако има рани символи от рода на . + - = и тн във записите прави проблеми и не връща правилни резултати и доста други неща като цяло,играчка е да нагласиш примерно ако записа е
test mest
и ги напишеш
в търсачката test mest може да ти покаже 20 други записа които съдържат test и когато си прецени да върне най-съответсащия в случая test mest.
Също така кавичките са проблеми защото се използват както в гугъл тоест
"cqla fraza" а понякога в самите записи има " и става объркване...


Сигурно си наясно с това, но все пак да кажа.
 
За бърз full text search можеш да ползваш Solr, но структурата на таблиците в mysql не позволява да имаш референции ...
 
Една MyISAM таблица с 2 полета - ID-връзка и текст. Слагаш и FTS индекс и търсиш в нея, след което JOIN-ваш Innodb таблицата по това ID и всичко си работи.

@Hous това ще се направя, че не съм го видял понеже съм страшно уморен.
 
Hous каза:
Само да кажа,че тоя full text search е малк прехвален според мен.
На единия сайт ползвам просто LIKE %$word%
а на другия full text search и да ти кажа и двата си имат + и - .

Класирането и самото търсене ако има рани символи от рода на . + - = и тн във записите прави проблеми и не връща правилни резултати и доста други неща като цяло,играчка е да нагласиш примерно ако записа е
test mest
и ги напишеш
в търсачката test mest може да ти покаже 20 други записа които съдържат test и когато си прецени да върне най-съответсащия в случая test mest.
Също така кавичките са проблеми защото се използват както в гугъл тоест
"cqla fraza" а понякога в самите записи има " и става объркване...


Сигурно си наясно с това, но все пак да кажа.

Понеже ме попита ще отговоря :) Индекси предполагам знаеш какво са. Въпросното нещо LIKE %....% не използва индекси. Тоест за да намери нещо трябва да претърси цялата таблица и поле по поле да проверява.

FTS индекса (с match ...) е (изненада) индекс. Като се търси така няма нужда да се обхожда цялата таблица и поле по поле да се търси.

В FTS полета може да се търси стотици пъти по-бързо отколкото с LIKE. Това разбира се зависи от размера на текста и броя текстове. Ако имаш 100 полета с по 20 думи сигурно разлика няма да има понеже това е страшно малко информация и компютрите са достатъчно бързи.
Но я пробвай да набуташ 1000 документа по 10kb. FTS ще изплюе резултат веднага, докато LIKE ще се мъчи сигурно минута.

Още повече FTS може да сортира резултатите по релевантност (най-общо казано по брой срещания на търсените думи) вместо просто да ти каже дали ги има или ги няма. Може да се търси по няколко думи без да са задължителни всички.

А кавичките могат да се ескейпнат и да не работят като при google, дори можеш да ги изключиш направо (не знам защо ще ти трябва да търсиш кавички).

По никакъв начин не искам да се заяждам :)
 

Back
Горе