MySQL Full-text Search

Opis baze:
Imam več tabel, vsaka posebej ima par kolumn, in recimo v posamezni tabeli je na določene kolumne dodan index fulltext in sicer vsak posebej. Recimo: tabela: avtor, fulltext index na 'ime' in fulltext index na 'priimek'. torej, kaj želim je v bistvu tale krača:

SELECT vsebina.id, avtor.ime, avtor.priimek, beseda.naziv, podnaslov.podnaslov, MATCH(vsebina.besedilo,avtor.ime,avtor.priimek,podnaslov.podnaslov,beseda.naziv) AGAINST('podeželje') AS score FROM
`delo_vsebina` LEFT JOIN `vsebina` ON delo_vsebina.vsebina_id=vsebina.id LEFT JOIN `delo` ON delo_vsebina.delo_id=delo.id LEFT JOIN delo_avtor ON delo_avtor.delo_id=delo.id LEFT JOIN avtor ON
delo_avtor.avtor_id=avtor.id LEFT JOIN delo_beseda ON delo_beseda.delo_id=delo.id LEFT JOIN beseda ON delo_beseda.beseda_id=beseda.id LEFT JOIN delo_podnaslov ON delo_podnaslov.delo_id=delo.id LEFT
JOIN podnaslov ON delo_podnaslov.podnaslov_id=podnaslov.id WHERE MATCH(vsebina.besedilo,avtor.ime,avtor.priimek,podnaslov.podnaslov,beseda.naziv) AGAINST('podeželje')

Ni lepa, vendar bi morala delovati.

vsebina.besedilo, avtor.ime itd. (vsi v MATCH) imajo FULLTEXT index v posamezni tabeli.
Je tole sploh pravilen način iskanja, ali bi moral narediti kako temporary tabelo z rezultati le te, pa potem tam nastaviti indexe na pravilne kolumne in nato pognati search nad tisto tabelo?

Skratka error dobim: "#1210 - Incorrect arguments to MATCH"

Sem tudi repairal tabele, če bi slučajno bil to problem, vendar je napaka še vedno tu...

Zanimivo da recimo če dam pa 1 argument MATCH-u, recimo samo "avtor.ime" ali samo "vsebina.besedilo", pa SQL spelje...

12 odgovorov

Samo potem mora spremeniti se pri vsakemu dodajanju produkta/novice/komentarja da se index updejta :)

@perunpro, v tem primeru potem raje tako da se kliče editContent, ki ta ID pobriše (delete) in nato add. Tako je simple.