10. marts 2004 - 17:21Der er
12 kommentarer og 1 løsning
FULLTEXT og LONGTEXT
Heyyyy, sad lige og rodede med mit gamle søgescript/database og var igang med at optimere lidt med MySQL's fulltext.
Kunne ikke forstå jeg ikke kunne lave longtext med attributten fulltext men læste så på mysql.com at fulltext åbenbart _kun_ understøtter int, text med lidt mere.
Hmmmmm, min søgefunktion skal nu stadig kunne søge i rows der indeholder data i formen af longtext da denne data ikke kan passe ind under alm. text
Hvaaaa, nogen smarte løsninger folk har fundet på eller er stødt på?
Kombineringer af alm. MATCH/fulltext søgning og gamle LIKE løsningen, eller bedre idéer?
FULLTEXT understøttes på felter af typen VARCHAR og TEXT (mener også at TINYTEXT, MEDIUMTEXT og LONGTEXT understøttes, selvom de ikke eksplicit er nævnt i dokumentationen). Der står intet om INT. Det lyder heller ikke sandsynligt at den skulle bruges på INT, da INT jo ikke kan bidrage til det relevans-index der skabes.
Hvis du yderligere har brug for at søge på felter af typen INT, skal du bruge de matematiske operatorer, såsom '='.
Har du prøvet at lave et MATCH(felt1, felt2, ...) AGAINST(felt1, felt2, ...) på LONGTEXT?
Det er ufatteligt store værdier du kan lagre i felter af typen LONGTEXT! Kan du ikke klare dig med 65536 tegn? Så stor en forfatter er nok heller ikke? *GG*
muddi: ;o) Ja, jeg gemmer "ufattelig" store mængder data i disse felter af typen longtext, eller havde jeg nok lavet det som alm. text. En stikordsliste i en 1500 siders organisationsteori bog er på en hel del mere end 65536 tegn... desværre ;o) Og elektroniske artikler om samme emne plejer såmænd også at være temmelig krævende. 65536 tegn er faktisk ikke særlig meget. Lidt ligesom en lille dansk stil tilbage fra gymnasietiden.
Og jup, har testen om longtext virkede med match-proceduren... desværre. Den melder også fejl når jeg forsøger at sætte longtext til fulltext, så longtext kan altså ikke være understøttet af fulltext.
Nu har jeg selv lige lavet et fulltext-index på et felt af typen longtext. Det kan godt lade sig gøre! Prøv f.eks. følgende kode og se om det ikke virker: create table free( id varchar(255) not null, archive varchar(255), datestamp char(10), groupdate int, alltext longtext, FULLTEXT(alltext), primary key(id) );
Og det er beskrivelse og stikord der burde fremgå som longtext. Som løsning lige nu har jeg "or like" løsningen, men den er ikke pisse effektiv set i forhold til en match løsning. Match løsning melder dog stadig fejl hos mig når jeg forsøger at lave søgning på beskrivelse og stikord uden at disse er fulltext. Og jeg kan ikke konvertere disse til fulltext :o(
Tak for den ellers kreative respons.
CREATE TABLE `findfo_data` ( `id` int(11) NOT NULL auto_increment, `kardeksnummer` text NOT NULL, `fagid` int(11) NOT NULL default '0', `datatypeid` int(11) NOT NULL default '0', `artid` int(11) NOT NULL default '0', `titel` text NOT NULL, `forfatter` text NOT NULL, `omraade` text NOT NULL, `beskrivelse` longtext NOT NULL, `link` text NOT NULL, `stikord` longtext NOT NULL, `kursusgang` text NOT NULL, `underviser` text NOT NULL, `laant` int(11) NOT NULL default '0', PRIMARY KEY (`id`), FULLTEXT KEY `kardeksnummer` (`kardeksnummer`,`titel`,`forfatter`,`omraade`,`kursusgang`,`underviser`), FULLTEXT KEY `omraade` (`omraade`), FULLTEXT KEY `beskrivelse` (`beskrivelse`) ) TYPE=MyISAM AUTO_INCREMENT=26 ;
Ok, jeg kunne godt oprette fulltext index på version 3.23.58 og også med version 4.0 og 4.1. Jeg ændrede i din tabelstruktur således:
CREATE TABLE `findfo_data` ( `id` int(11) NOT NULL auto_increment, `kardeksnummer` text NOT NULL, `fagid` int(11) NOT NULL default '0', `datatypeid` int(11) NOT NULL default '0', `artid` int(11) NOT NULL default '0', `titel` text NOT NULL, `forfatter` text NOT NULL, `omraade` text NOT NULL, `beskrivelse` longtext NOT NULL, `link` text NOT NULL, `stikord` longtext NOT NULL, `kursusgang` text NOT NULL, `underviser` text NOT NULL, `laant` int(11) NOT NULL default '0', PRIMARY KEY (`id`), FULLTEXT KEY `kardeksnummer` (`kardeksnummer`,`titel`,`forfatter`,`beskrivelse`, `stikord`,`omraade`,`kursusgang`,`underviser`), FULLTEXT KEY `omraade` (`omraade`), FULLTEXT KEY `beskrivelse` (`beskrivelse`) ) TYPE=MyISAM AUTO_INCREMENT=26
Du kan jo kopiere din data over i en ny tabel og bagefter bruge rename til at ændre navnet på den nye tabel til navnet på den gamle ...
Hmmmm, sikkert bare mig der har været doven så. Har altid brugt phpmyadmin, bruger altid den nyeste version, og denne opfatter både stikord og beskrivelse som "ikke fulltext" :(
Men jeg kan da godt se at hvis jeg alter disse og tester script virker det fint :)
Sååååå, jeg må sige jeg er fint tilfreds... bare ærgerligt at phpmyadmin ikke lige fattede det :o)
Hva satan, går de rundt og laver om på den måde man accepterer på :D
Tak for hjælpen ;o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.