[MySQL] Match Against.. minimaal 4 letters

Pagina: 1
Acties:

  • Mir
  • Registratie: Maart 2001
  • Niet online
He,

na een tijdje kloten dat mijn query niet goed werkte:
code:
1
2
3
SELECT * FROM users
 WHERE 
 match (Naam) against ("m*" IN BOOLEAN MODE)


Kwam ik erachter dat het kwam omdat ik "Mir" in mijn 'Naam' had staan. Dit vind hij te kort en laat hij dan ook niet zien.

Dit is vrij irritant.. kan ik dit niet omzeilen??

tnx!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Waarom gebruik je niet een
code:
1
where naam like 'm*'


Ik begrijp niet goed wat je wilt bereiken, maar als je alle user wilt hebben die beginnen met een m, zou ik like gebruiken.

If you are not wiping out you are nog pushing enough...


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Pinda schreef op 02 juni 2004 @ 00:02:
Waarom gebruik je niet een
code:
1
where naam like 'm*'


Ik begrijp niet goed wat je wilt bereiken, maar als je alle user wilt hebben die beginnen met een m, zou ik like gebruiken.
Is full text search niet sneller? Maar ja, als je inderdaad maar 1 veld gaat zitten bekijken dan heeft het volgens mij niet veel nut nee, dan zou ik ook like gebruiken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

De mysql dox zeggen het volgende:
The MATCH() function performs a natural language search for a string against a text collection. A collection is a set of one or more columns included in a FULLTEXT index. The search string is given as the argument to AGAINST(). The search is performed in case-insensitive fashion. For every row in the table, MATCH() returns a relevance value, that is, a similarity measure between the search string and the text in that row in the columns named in the MATCH() list.
Ik heb zo een vermoeden dat dit niet is wat jij bedoelt. Lijkt me niet dat je op een users.naam veld een fulltext index hebt (dit is imo alleen bedoelt voor "text" velden).

If you are not wiping out you are nog pushing enough...


  • Mir
  • Registratie: Maart 2001
  • Niet online
Het was even voor het voorbeeld dat ik maar 1 Row gebruikte.. ik hebe namenlijk een full index..

en die "IN BOOLEAN MODE" gebruik ik om "ik zoek naar" mogelijk te maken.

en nee, like is geen oplossing.. :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

code:
1
2
3
4
5
6
7
SELECT * FROM users
 WHERE 
 match (Naam) against ("m*" IN BOOLEAN MODE)
 OR (
  LEN(Naam) > 3
  AND LCASE(Naam) LIKE 'm%'
  )

Zoiets misschien?

[ Voor 15% gewijzigd door NMe op 02-06-2004 00:47 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Mir schreef op 02 juni 2004 @ 00:38:
[..]
en nee, like is geen oplossing.. :)
En de reden daarvan is.... ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
FF zoeken op in de mysql docs op het net, maar voor de Fulltext moet de woordlengte minimaal 4 characters zijn... Je kunt dit instellen adhv. ft_min_word_len (vanaf mysql 4, wat overigens ook geldt voor de 'boolean mode')

Een tweede iets waar je aan moet denken is dat als het 'verwachte' resultaat in meer dan 50% van de 'bron'rijen voorkomt, mysql dat ziet als GEEN resultaat.

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Het lijkt me erg sterk dat als je op een veldnaam "naam" zoekt je een full text search nodig hebt. Of je naamgeving is wat onduidelijk of je zult wat duidelijker moeten zijn met wat je wilt bereiken.

Match in boolean mode kent de 50% treshold trouwens niet:
Boolean full-text searches have these characteristics:
- They do not use the 50% threshold.
- They do not automatically sort rows in order of decreasing relevance. You can see this from the preceding query result: The row with the highest relevance is the one that contains ``MySQL'' twice, but it is listed last, not first.
- They can work even without a FULLTEXT index, although this would be slow.
Blijf benieuwd waarom je niet de like kan gebruiken, helemaal omdat je zoekt op 1 letter in een ogenschijnlijk "klein" veld.

If you are not wiping out you are nog pushing enough...


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Pinda schreef op 02 juni 2004 @ 10:14:
Blijf benieuwd waarom je niet de like kan gebruiken, helemaal omdat je zoekt op 1 letter in een ogenschijnlijk "klein" veld.
Ik heb het vermoeden dat TS met deze regel:
Het was even voor het voorbeeld dat ik maar 1 Row gebruikte.. ik hebe namenlijk een full index..
bedoelde dat dit niet zijn echte query is en hij in meerdere kolommen wil kijken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mir
  • Registratie: Maart 2001
  • Niet online
NMe84 snapt mij ;)
Het is gewoon even een voorbeeldje..

ik ga even zoeken naar ft_min_word_len .. tnx!
Pagina: 1