MATCH ... AGAINST (..) of LIKE %...%, in welk geval

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

05/03/2014 12:07:35
Quote Anchor link
Ik noem een aantal gevallen.
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
 
PHP hulp

PHP hulp

29/03/2024 06:30:16
 
Michael -

Michael -

05/03/2014 12:11:41
Quote Anchor link
Dit zijn toch 2 totaal verschillende functies?
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 -
 
Francoi gckx

Francoi gckx

05/03/2014 12:22:11
Quote Anchor link
Ok dan herstel ik mij vraag.

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
 
Michael -

Michael -

05/03/2014 14:24:30
Quote Anchor link
Die 2 functies combineren lijkt me inderdaad niet de bedoeling :)
 
Francoi gckx

Francoi gckx

05/03/2014 14:35:47
Quote Anchor link
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?
 
Simo Mr

Simo Mr

05/03/2014 15:01:44
Quote Anchor link
Voor advanced filters gebruikt MATCH AGAINST met IN BOOLEAN MODE.

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
 
Francoi gckx

Francoi gckx

05/03/2014 15:13:07
Quote Anchor link
Het beantwoord niet helemaal de vraag niks wegnemend van je uitleg
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?
 
Simo Mr

Simo Mr

05/03/2014 15:31:06
Quote Anchor link
Ja, Like is case-insentive, zelf als je index gebruikt
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?
 
Erwin H

Erwin H

05/03/2014 17:16:32
Quote Anchor link
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

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.