MATCH ... AGAINST (..) of LIKE %...%, in welk geval
1 = MATCH ... AGAINST (..)
2 = LIKE %...%
Je wilt een matching systeem maken 1 of 2?
Je wilt een zoeksysteem met bv een filter maken 1 of 2?
Voel vrij om nog een paar voorbeelden te noemen die ik nu even niet kan bedenken
Match is bedoelt voor exacte resultaten
Like is bedoelt voor 'begint met, eindigt met' resultaten
LIKE a%
Select velden die beginnen met a
MATCH a*
Select velden waarin een woord begint met a
Er zijn trouwens als best veel topics over
Gewijzigd op 05/03/2014 12:16:40 door Michael -
Je wilt een matching systeem of zoeksysteem maken:
Kan je LIKE %...% gebruiken met tegelijk in een query (bijv per matchwoord een van die 2 methodes gebruiken) of zelfs echt tegelijk (bijv voor een matchwoord allebei gebruiken (WHERE LIKE %woord% AND MATCH die AGAINST(woord))
Dus dan zoek/match je op exact de woorden(MATCH AGAINST) EN niet-exact woorden(met LIKE) of is dit geheel dubbelop;)?
Gewijzigd op 05/03/2014 12:26:03 door Francoi gckx
Die 2 functies combineren lijkt me inderdaad niet de bedoeling :)
Michael - op 05/03/2014 14:24:30:
Die 2 functies combineren lijkt me inderdaad niet de bedoeling :)
Ok dus dat is out of the question
mijn bedoeling is dan namelijk,
query 1 = als die een zoekterm exact vind dus met MATCH AGAINST
die een hoge prioriteit heeft maar
query 2 = als er geen exact woord is gevonden dat je dan
een LIKE % % query gebruikt
Dit moet dan zeker met php in een if query
als die een exact woord teruggeeft dus TRUE
dan toon result query 1
anders gaan door met 2 en toon result query 2
Kan hier een bruikbaar nut achter zitten?
Wat mij betreft en als ik mysql gebruik dan gebruik in nooit Like met %.
Ik gebruik allen maar MATCH AGAINST met FULLTEXT index of = met een index
Het nadeel van MATCH AGAINST is dat je een limit hebt van de minimaal letters die worden geïndexeerd. (limit instelbaar)
Maar als je like wilt gebruiken dan deze punten zijn belangrijk
LIKE 'HE%'; gebruikt index
LIKE '%He'; gebruikt geen index
Gewijzigd op 05/03/2014 15:08:37 door Simo Mr
ik heb daar gelijk vragen voor:)
"Maar als je like wilt gebruiken dan deze punten zijn belangrijk
LIKE 'HE%'; gebruikt index
LIKE '%He'; gebruikt geen index"
Dus LIKE is case-insentive maar niet als je het indexed? <dus eigenlijk is altijd index gebruiken het best>
Toch om op mij reactie boven terug te komen,
omdat MATCH AGAINST een geavanceerder zoekmiddel is right?
Kan je dat als eerste query toch doen maar als die faalt LIKE gebruiken als secundair zoekmiddel?
Dus je gaat eerst op een zoekterm EXACT zoeken daar is MATCH AGAINST het beste voor
maar als dat niet lukt ga je ONEXACT zoeken daar is LIKE %% het beste voor?
ofniet?
maar als je meer informaties wil hebben dan lees deze http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html.
Dubbel search is helemaal niet efficiënt.
kan jij jouw table structure even laten zien?
Simo Mr op 05/03/2014 15:01:44:
Maar als je like wilt gebruiken dan deze punten zijn belangrijk
LIKE 'HE%'; gebruikt index
LIKE '%He'; gebruikt geen index
LIKE 'HE%'; gebruikt index
LIKE '%He'; gebruikt geen index
Het belangrijkste punt in dit voorbeeld is niet case sensitivity. Dat ligt aan de collatie die je hebt ingesteld voor de database/table/kolom. Het punt hier is dat er geen index gebruikt kan worden op het moment dat je een wildcard aan het begin van een zoekterm gebruikt. De indices zijn namelijk opgebouwd op de hele waarde van de kolom. Als je dus op 'HE%' zoekt dan kan mysql via de index heel snel alle waardes vinden die beginnen met 'HE' (of 'he', etc). Maar als je met een wildcard aan het begin zoekt dan kan dat niet, omdat '%HE' nog steeds met alle waardes kan matchen. 'Ahe', 'bhe', 'wat er dan ook in staat he' matcht allemaal. De index wordt dan dus niet gebruikt en dat kan een enorme impact hebben op de performance.
Gewijzigd op 05/03/2014 17:17:14 door Erwin H