Boolska fulltextsökningar i MySQL

Sammanfattning: I den här handledningen lär du dig hur du utför boolska fulltextsökningar i MySQL. Dessutom lär du dig hur du använder booleska operatorer för att bilda mycket komplexa sökfrågor.

Introduktion till MySQL Booleska fulltextsökningar i MySQL

Bortsett från fulltextsökningar i naturligt språk har MySQL stöd för ytterligare en form av fulltextsökning som kallas Booleska fulltextsökningar. I det booleska läget söker MySQL efter ord istället för efter begrepp som i den naturliga språksökningen.

MySQL låter dig utföra en fulltextsökning baserad på mycket komplexa frågor i det booleska läget tillsammans med booleska operatörer. Därför lämpar sig fulltextsökningen i boolskt läge för erfarna användare.

För att utföra en fulltextsökning i boolskt läge använder du modifikatorn IN BOOLEAN MODE i uttrycket AGAINST. Följande exempel visar hur du söker efter en produkt vars produktnamn innehåller ordet Truck.

Code language: SQL (Structured Query Language) (sql)

mysql booleska tex-sökningar - produktnamn med nyckelordet Truck
Två produkter vars produktnamn innehåller ordet Truck returneras.

För att hitta den produkt vars produktnamn innehåller ordet Truck men inte några rader som innehåller Pickup kan du använda den booleska operatorn exkludera ( - ), som returnerar resultatet som exkluderar nyckelordet Pickup som följande fråga:

Code language: SQL (Structured Query Language) (sql)
mysql boolean tex söker med Boolean operator

MySQL Boolean fulltext sökoperatorer

I följande tabell illustreras de booleanska operatörerna för fulltextsökning och deras betydelser:

Operator Beskrivning
+ Inkludera, ordet måste vara närvarande.
Exkludera, ordet får inte finnas med.
> Inkludera, och öka rangordningsvärdet.
< Inkludera, och minska rangordningsvärdet.
() Gruppera ord till underuttryck (så att de kan inkluderas, uteslutas, rangordnas och så vidare som en grupp).
~ Negera ett ords rangordningsvärde.
* Vildkort i slutet av ordet.
”” Definierar en fras (i motsats till en lista med enskilda ord, hela frasen matchas för att inkluderas eller uteslutas).

De följande exemplen illustrerar hur man använder booleska fulltextoperatörer i sökfrågan:

För att söka efter rader som innehåller minst ett av de två orden: mysql eller tutorial

’mysql tutorial’

För att söka efter rader som innehåller båda orden:

’+mysql +tutorial’

För att söka efter rader som innehåller ordet ”mysql”, men ge högre rang åt de rader som innehåller ”tutorial”:

’+mysql tutorial’

För att söka efter rader som innehåller ordet ”mysql” men inte ”tutorial”

’+mysql -tutorial’

För att söka efter rader som innehåller ordet ”mysql” och placera raden lägre om den innehåller ordet ”tutorial”.

’+mysql ~tutorial’

För att söka efter rader som innehåller orden ”mysql” och ”tutorial”, eller ”mysql” och ”training” i valfri ordning, men placera de rader som innehåller ”mysql tutorial” högre än ”mysql training”.

’+mysql +(>tutorial <training)’

För att hitta rader som innehåller ord som börjar med ”my”, t.ex. ”mysql”, ”mydatabase” osv, använder du följande:

’my*’

MySQL boolsk fulltextsökning huvudfunktioner

  • MySQL sorterar inte automatiskt rader efter relevans i fallande ordning i boolsk fulltextsökning.
  • För att kunna utföra boolska sökningar krävs att InnoDB-tabellerna kräver att alla kolumner i MATCHuttrycket har ett FULLTEXTindex. Observera att MyISAM-tabeller inte kräver detta, även om sökningen är ganska långsam.
  • MySQL har inte stöd för flera booleska operatörer i en sökfråga på InnoDB-tabeller t.ex. MySQL returnerar ett fel om du gör det. MyISAM beter sig dock annorlunda. Den ignorerar andra operatörer och använder den operatör som ligger närmast sökordet, till exempel ”+-mysql” blir ”-mysql”.
  • InnoDB:s fulltextsökning har inte stöd för efterföljande plus (+) eller minus (-) tecken. Den stöder endast ledande plus- eller minustecken. MySQL kommer att rapportera ett fel om sökordet är ’mysql+’ eller ’mysql-’. Dessutom är följande ledande plus- eller minustecken med jokertecken ogiltiga: +*, +-
  • Tröskelvärdet 50 % innebär att om ett ord förekommer i mer än 50 % av raderna kommer MySQL att ignorera det i sökresultatet.

I den här handledningen har du lärt dig hur du utför booleska MySQL-booleska fulltextsökningar med många användbara booleska operatorer.

  • Har du nytta av den här handledningen?
  • JaNej