sql >> Database teknologi >  >> RDS >> Mysql

Mysql fuldtekstindekseringsbegrænsninger?

Det er det bestemt ikke!

Ethvert søgeord, der udelukkende består af blokerede ord, vil stille mislykkes. Ord kan blokeres på grund af min/max længde restriktioner og/eller stopord filen.

Jeg fandt standardstopordsfilen alt for aggressiv, den forhindrede mange gyldige søgninger. Standard minimumlængde på 4 kom også meget ofte ind for akronymer, folk måske vil søge efter. Jeg reducerede ft_min_word_len til 3 og fjernede stoplisten fuldstændigt (ft_stopword_file=''). Dokument:http://dev.mysql.com /doc/refman/5.1/da/fulltext-fine-tuning.html

Du kan også undersøge søgeforespørgslen for at se, om den kun indeholder ord på <4 bogstaver, og i så fald falde tilbage til en LIKE-søgning. Der er ikke nogen så nem måde at komme rundt på stoplisten på applikationsniveau.

Udvalget af 'ordtegn' opfylder muligvis ikke dine behov, og det er svært at ændre. For eksempel vil søgning efter "Terry" ikke matche "Terry's". Generelt er der ingen støtte for nogen form for stammer, så "kiks" vil heller ikke matche "kiks".

Endelig, som cg nævnte, er der ingen understøttelse af InnoDB. I denne dag og alder ønsker du ikke at lægge alle dine data i en MyISAM-tabel.

Hvis du har lagerpladsen til overs, er det, du kan gøre, at lægge den kanoniske hovedversion af dataene i en InnoDB-tabel og derefter oprette en separat MyISAM-tabel, der indeholder en kopi af fritekstindholdet, udelukkende til brug som searchbait. Du skal opdatere begge tabeller ved en ændring, men hvis MyISAM-tabellen mister integritet, mister du i det mindste kun muligheden for at søge i de pågældende rækker i stedet for at samle de rigtige live-data op og få applikationsfejl.

Du kan derefter, hvis du har cyklusser til overs, implementere din egen tekstbehandling på søgelokket og søgeord for at komme uden om nogle af ovenstående begrænsninger. Du kan f.eks. undslippe tegn, du ønsker skal være ord-tegn, fjerne tegn, du ikke ønsker skal være ord-tegn, og udføre simpel manuel engelsk stemming.



  1. STRING_SPLIT() i SQL Server 2016:Opfølgning #2

  2. Forbindelsesfejl - SQLSTATE[HY000] [2002] Operation timeout

  3. Entity Framework kerne - Indeholder er der forskel på store og små bogstaver eller ufølsom?

  4. connection.select_value returnerer kun strenge i postgres med pg gem