Aangezien ik nou al een hele tijd bezig ben om de 'perfecte' SQL-zoekopdracht te formuleren .. en ik maar niet bereik wat ik wil, roep ik jullie hulp ff in.
Het is de bedoeling om te kunnen zoeken op een soort marktplaats-achtige website. Er kan worden gezocht op de titel en de beschrijving van de advertentie. Daarbij vind ik het sorteren op relevantie wel fijn, dus heb ik een FULLTEXT gedaan op de velden beschrijving en titel, en gebruik ik MATCH .. AGAINST enzo. Aangezien ik wil dat ook bij 50% of meer de resultaten teruggegeven moeten worden, en ik wil gebruik maken van operators, gebruik ik IN BOOLEAN MODE.
Daarnaast zou ik het ook fijn vinden als hij 'fietsband' vindt als ik zoek op 'fiets'. Maar ook de zoekopdracht 'e' moet, hoe nutteloos dan ook, records teruggeven waar een 'e' in voorkomt.
In BOOLEAN MODE kan je echter alleen de ster (*) ACHTER het te zoeken woord zetten, en niet ervoor. Zoeken op 'fiets' levert dus wel 'fietsband' op, maar niet 'bakfiets'.
Nou mijn vraag: Hoe los ik dit op?
Daarnaast worden bepaalde woorden en woordcombinaties soms niet gevonden.
SQL-zoekopdracht:
Ik heb bijvoorbeeld een record met de volgende (onzin-)beschrijving:
"Ik zoek een goed werkende telefoon om mee te bellen in USA"
Zoekterm: (0 = record niet gevonden, 1 = record wel gevonden)
een -> 0
tel -> 1
om mee -> 0
telefoon -> 1
telefoon mee -> 1
USA -> 0
USA bellen -> 1
Na enige analyse kom ik er achter dat een woordje met minder dan 4 letters niet geliefd is mits dit een losstaand woord is. Zoeken op 'tel' levert dan weer geen problemen op, gezien het een deel van het woord telefoon is. Dit heeft dan weer te maken met de ster (*) die ik gebruik. Maar.... hoe los ik dit probleem op zodat ook losstaande korte worden gevonden worden?
Excuses voor het lange bericht, maar hopelijk heb ik de problemen zo duidelijk omschreven...
Het is de bedoeling om te kunnen zoeken op een soort marktplaats-achtige website. Er kan worden gezocht op de titel en de beschrijving van de advertentie. Daarbij vind ik het sorteren op relevantie wel fijn, dus heb ik een FULLTEXT gedaan op de velden beschrijving en titel, en gebruik ik MATCH .. AGAINST enzo. Aangezien ik wil dat ook bij 50% of meer de resultaten teruggegeven moeten worden, en ik wil gebruik maken van operators, gebruik ik IN BOOLEAN MODE.
Daarnaast zou ik het ook fijn vinden als hij 'fietsband' vindt als ik zoek op 'fiets'. Maar ook de zoekopdracht 'e' moet, hoe nutteloos dan ook, records teruggeven waar een 'e' in voorkomt.
In BOOLEAN MODE kan je echter alleen de ster (*) ACHTER het te zoeken woord zetten, en niet ervoor. Zoeken op 'fiets' levert dus wel 'fietsband' op, maar niet 'bakfiets'.
Nou mijn vraag: Hoe los ik dit op?
Daarnaast worden bepaalde woorden en woordcombinaties soms niet gevonden.
SQL-zoekopdracht:
code:
1
2
3
4
5
6
| SELECT id, titel, beschrijving, MATCH (titel, beschrijving) AGAINST ('$zoekterm') AS score FROM tabel WHERE MATCH (titel, beschrijving) AGAINST ('$zoekterm*' IN BOOLEAN MODE) ORDER BY score DESC LIMIT $vanaf, 30 |
Ik heb bijvoorbeeld een record met de volgende (onzin-)beschrijving:
"Ik zoek een goed werkende telefoon om mee te bellen in USA"
Zoekterm: (0 = record niet gevonden, 1 = record wel gevonden)
een -> 0
tel -> 1
om mee -> 0
telefoon -> 1
telefoon mee -> 1
USA -> 0
USA bellen -> 1
Na enige analyse kom ik er achter dat een woordje met minder dan 4 letters niet geliefd is mits dit een losstaand woord is. Zoeken op 'tel' levert dan weer geen problemen op, gezien het een deel van het woord telefoon is. Dit heeft dan weer te maken met de ster (*) die ik gebruik. Maar.... hoe los ik dit probleem op zodat ook losstaande korte worden gevonden worden?
Excuses voor het lange bericht, maar hopelijk heb ik de problemen zo duidelijk omschreven...
[ Voor 5% gewijzigd door Wolf3D op 28-10-2005 15:20 ]