sql >> Database >  >> RDS >> Mysql

MySQL Full Text Search Mystery

Van MySQL-documenten

  • + Een voorlopend plusteken geeft aan dat dit woord aanwezig moet zijn in elke rij die wordt geretourneerd.

  • * De asterisk dient als de operator voor het afkappen (of jokerteken). Woorden komen overeen als ze beginnen met het woord dat voorafgaat aan de *operator.

    Als een woord is opgegeven met de truncatie-operator, wordt het niet verwijderd uit een booleaanse zoekopdracht, zelfs als het te kort is (zoals bepaald met de instelling ft_min_word_len) of een stopwoord. Dit gebeurt omdat het woord niet als een te kort of een stopwoord wordt gezien, maar als een voorvoegsel dat in het document aanwezig moet zijn in de vorm van een woord dat begint met het voorvoegsel .

In context:

MATCH(...) TEGEN(...)

MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE) betekent dat u zoekt naar rijen met een woord in de name kolom moet bevatten ski , en moet beginnen met het woord ski .

Van de set die je hebt gepost, Dartmouth Skiway is de enige name die aan deze vereisten voldoet:het bevat het woord ski , en wordt voorafgegaan door het woord ski .

De andere name kolommen, hoewel ze overeenkomen met de eerste regel:moet ski . bevatten , ze worden niet voorafgegaan door ski , zoals bepaald in uw regel. De rij die wordt geretourneerd door uw booleaanse zoekopdracht is de enige met een name kolom die een woord bevat dat beide bevat ski en is een woord voorvoegsel door ski .

Probeer, zoals voorgesteld door ajreal, de ft_min_len_word_setting te verkleinen in my.cnf . Uw zoekopdracht levert mogelijk niet de resultaten op die u verwacht vanwege de standaardinstelling. Probeer het te verminderen tot 3.

WAAR kolom LIKE %text%

WHERE name LIKE "%ski%" zoekt naar rijen met name kolommen die ski . bevatten , ongeacht waar het woord voorkomt.



  1. Hoe SQL Server te installeren

  2. SQL Server:moet ik information_schema-tabellen gebruiken in plaats van sys-tabellen?

  3. Wat is beter voor uw big data-applicatie, SQL of NoSQL?

  4. Onbekende kolom {0} in op clausule