Avatar billede lassel Nybegynder
10. marts 2004 - 17:21 Der 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?
Avatar billede muddi Praktikant
11. marts 2004 - 16:41 #1
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?
Avatar billede muddi Praktikant
11. marts 2004 - 16:55 #2
Bruger du al den plads der er i felterne af typen LONGTEXT? Ellers kunne du jo ALTER feltet til typen TEXT.
Se nedenstående udregninger:

LONGTEXT: 2^(4*8) = 2^32 = 4294967296 byte
MEDIUMTEXT: 2^(3*8) = 2^24 = 16777216 byte
TEXT: 2^(2*8) = 2^16 = 65536 byte
TINYINT: 2^(1*8) = 2^8 = 256 byte

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*

/Morten
Avatar billede lassel Nybegynder
11. marts 2004 - 21:00 #3
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.
Avatar billede muddi Praktikant
12. marts 2004 - 11:22 #4
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)
);

Hvilken MySQL-version har du i øvrigt?
Avatar billede muddi Praktikant
12. marts 2004 - 11:24 #5
Kan du give et dump af din tabelstruktur? Så skal jeg prøve at lave et FULLTEXT-index.
Avatar billede lassel Nybegynder
12. marts 2004 - 17:16 #6
Jeg har MySQL 3.23.58

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 ;
Avatar billede muddi Praktikant
12. marts 2004 - 17:28 #7
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 ...
Avatar billede muddi Praktikant
12. marts 2004 - 17:29 #8
Jeg havde heller ikke problemer med:

ALTER TABLE `findfo_data` ADD FULLTEXT (
`stikord`
)

I version 3.23.58
Avatar billede lassel Nybegynder
12. marts 2004 - 17:49 #9
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)

Tak for hjælpen.
Avatar billede muddi Praktikant
13. marts 2004 - 14:42 #10
Det var så lidt :o) Lukker du spørgsmålet ?

mvh. Morten
Avatar billede lassel Nybegynder
13. marts 2004 - 16:05 #11
Nåååå ja, glemte jeg da  ;o)
Avatar billede muddi Praktikant
14. marts 2004 - 15:57 #12
Den missede vidst igen... :o)
Avatar billede lassel Nybegynder
14. marts 2004 - 16:46 #13
Hva satan, går de rundt og laver om på den måde man accepterer på :D

Tak for hjælpen ;o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester