Fulltext op voornaam,achternaam en functie
Michael -
26/10/2015 20:05:04Hallo,
Mijn ervaring met FULLTEXT is niet zo groot, meestal is LIKE voldoende, toch wil ik eens meer kennis maken met FULLTEXT en heb daarom hiervoor gekozen voor dit project.
Ik heb de tutorial van MySQL doorgenomen voor de basiskennis.
Mijn project bestaat uit een lijst met zo'n 550 records met voornaam, achternaam, functie en geboortedatum.
Ik wil graag kunnen zoeken in de eerste drie, maar tegen een aantal dingen aan.
Wat ik heb:
SELECT MATCH(voornaam,achternaam,functie) AGAINST('".$q."*' IN BOOLEAN MODE) score
WHERE MATCH(voornaam,achternaam,functie) AGAINST('".$q."*' IN BOOLEAN MODE)
ORDER BY score DESC
De order zorgt ervoor dat de meest relevante bovenaan komt (/zou moeten komen).
Echter zijn er namen als Jan-Peter, Luc, Bert-jan die onverwachte resultaten geven.
Het lijkt erop dat de streep wordt genegeerd en daarnaast lijkt Jan en Luc iets te kort waardoor ik eerst de peter's krijg wanneer ik Jan-peter zoek. Luc kan ik niet vinden zonder achternaam, wel krijg ik dan Luca wat dus wel lang genoeg is.
Als ik zoek op Bert-jan krijg ik: #1 Bert, #2 .. Janssen, #3 .. Jansen, #4 .. Jansen, #5 Bert, #6 Bert-jan.
Voor mij zijn dit resultaten die ik eigenlijk niet verwacht en zou liever Bert-Jan op #1 krijgen.
Kan ik hieraan nog iets verbeteren om betere zoekresultaten te krijgen?
Bij voorbaat dank
Mijn ervaring met FULLTEXT is niet zo groot, meestal is LIKE voldoende, toch wil ik eens meer kennis maken met FULLTEXT en heb daarom hiervoor gekozen voor dit project.
Ik heb de tutorial van MySQL doorgenomen voor de basiskennis.
Mijn project bestaat uit een lijst met zo'n 550 records met voornaam, achternaam, functie en geboortedatum.
Ik wil graag kunnen zoeken in de eerste drie, maar tegen een aantal dingen aan.
Wat ik heb:
SELECT MATCH(voornaam,achternaam,functie) AGAINST('".$q."*' IN BOOLEAN MODE) score
WHERE MATCH(voornaam,achternaam,functie) AGAINST('".$q."*' IN BOOLEAN MODE)
ORDER BY score DESC
De order zorgt ervoor dat de meest relevante bovenaan komt (/zou moeten komen).
Echter zijn er namen als Jan-Peter, Luc, Bert-jan die onverwachte resultaten geven.
Het lijkt erop dat de streep wordt genegeerd en daarnaast lijkt Jan en Luc iets te kort waardoor ik eerst de peter's krijg wanneer ik Jan-peter zoek. Luc kan ik niet vinden zonder achternaam, wel krijg ik dan Luca wat dus wel lang genoeg is.
Als ik zoek op Bert-jan krijg ik: #1 Bert, #2 .. Janssen, #3 .. Jansen, #4 .. Jansen, #5 Bert, #6 Bert-jan.
Voor mij zijn dit resultaten die ik eigenlijk niet verwacht en zou liever Bert-Jan op #1 krijgen.
Kan ik hieraan nog iets verbeteren om betere zoekresultaten te krijgen?
Bij voorbaat dank
PHP hulp
24/12/2024 17:33:21Pg Vincent
31/10/2015 12:32:50MySQL's FULLTEXT doet niet aan substrings, dus 'jan' zal nooit 'jan-luc' vinden.
Er is inderdaad een limiet op het aantal tekens, zoekwoorden van minder dan vier tekens worden genegeerd, dit kun je aanpassen in de config maar dan loop je weer het risico dat je bij het zoeken op "jan van putten" ook matches krijgt op "een plank van hout".
Over je onverwachte resultaten op bert-jan: wat is de score daar? Want er is een dikke kans dat de score vooral die resultaten hetzelfde is.
Er is inderdaad een limiet op het aantal tekens, zoekwoorden van minder dan vier tekens worden genegeerd, dit kun je aanpassen in de config maar dan loop je weer het risico dat je bij het zoeken op "jan van putten" ook matches krijgt op "een plank van hout".
Over je onverwachte resultaten op bert-jan: wat is de score daar? Want er is een dikke kans dat de score vooral die resultaten hetzelfde is.