sql >> Database >  >> RDS >> Mysql

Zoeken met jokertekens in MySQL full-text zoeken

Helaas kunt u dit niet doen met een MySQL full-text index. U kunt '*nited states' niet ophalen direct uit de index omdat linkertekens het belangrijkste onderdeel van de index zijn. U kunt echter kunt zoek 'United Sta*' .

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

De volledige tekst van MySQL presteert het beste bij het zoeken naar hele woorden in zinnen - zelfs dat kan soms niet goed zijn. Anders raad ik aan om een ​​externe full-text engine te gebruiken, zoals Solr of Sphinx . Ik denk dat Sphinx jokertekens voor voorvoegsels en achtervoegsels toestaat, ik weet niet zeker wat de andere zijn.

Je zou terug kunnen gaan naar MySQL's LIKE clausule, maar nogmaals, het uitvoeren van zoekopdrachten zoals LIKE '%nited states' of LIKE '%nited Stat%' , zal ook lijden op de prestaties, omdat het de index niet kan gebruiken voor de eerste paar tekens. 'United Sta%' en 'Unit%States' zijn in orde omdat de index kan worden gebruikt tegen de eerste reeks bekende karakters.

Een ander vrij belangrijk voorbehoud bij het gebruik van de volledige tekstindexering van MySQL is de lijst met stopwoorden en instellingen voor minimale woordlengte . Op een gedeelde hostingomgeving bent u bijvoorbeeld beperkt tot woorden groter dan of gelijk aan 4 tekens. Dus zoeken op 'Goo' om 'Google' te krijgen zou mislukken. De lijst met stopwoorden verbiedt ook gewone woorden als 'en', 'misschien' en 'buiten' - in feite zijn er in totaal 548 stopwoorden! Nogmaals, als je geen shared hosting gebruikt, zijn deze instellingen relatief eenvoudig aan te passen, maar als je dat wel doet, zul je geïrriteerd raken door enkele van de standaardinstellingen.




  1. JDBC PreparedStatement resulteert in MySQL-syntaxisfout

  2. De tijdzone van de database instellen in application.ini

  3. Hoe selecteer je het aantal met Laravel's vloeiende query-builder?

  4. Op zoek naar beschikbaarheid met MySQL (en PHP)?