MySQL Full-text Search
4 naročniki
4 naročniki
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.