sql >> Databasteknik >  >> RDS >> Mysql

MySQL Full Text Search Mystery

Från MySQL-dokument

  • + Ett inledande plustecken anger att detta ord måste finnas på varje rad som returneras.

  • * Asterisken fungerar som trunkeringsoperatorn (eller jokertecken). Till skillnad från de andra operatorerna bör den läggas till i ordet som ska påverkas. Ord matchar om de börjar med ordet som föregår *operatorn.

    Om ett ord anges med trunkeringsoperatorn tas det inte bort från en boolesk fråga, även om det är för kort (som bestämt från inställningen ft_min_word_len) eller ett stoppord. Detta beror på att ordet inte ses som för kort eller astopord, utan som ett prefix som måste finnas i dokumentet i form av ett ord som börjar med prefixet .

I sammanhanget:

MATCH(...) MOT(...)

MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE) betyder att du söker efter rader där ett ord i name kolumnen måste innehålla ski , och måste börja med ordet ski .

Från setet du har lagt upp, Dartmouth Skiway är det enda name som uppfyller dessa krav:den innehåller ordet ski , och har ordet ski som prefix .

Det andra name kolumner, även om de matchar den första regeln:måste innehålla ski , de har inte prefix med ski , som föreskrivs i din regel. Raden som returneras av din booleska sökning är den enda med ett name kolumn som innehåller ett ord som båda innehåller ski och är ett ord med prefix av ski .

Som föreslagits av ajreal, försök att minska ft_min_len_word_setting i my.cnf . Din sökning kanske inte ger de resultat du förväntar dig på grund av standardinställningen. Försök att minska den till 3.

WHERE kolumn LIKE %text%

WHERE name LIKE "%ski%" söker efter rader med name kolumner som innehåller ski , oavsett var ordet förekommer.



  1. Hur skapar man MySQL-fråga för att hitta relaterade inlägg från flera tabeller?

  2. Ogiltigt XML-format - Hur man undviker detta

  3. Hur man länkar en Access-databas till SQL Server i Access 2016

  4. Hur ändrar jag alla tabeller i min databas till UTF8-teckenuppsättning?