sql >> Database >  >> RDS >> Mysql

Zoeken in een SQL-tabel naar een zin

Het spelfoutprobleem is moeilijk, zo niet onmogelijk, goed op te lossen in pure MySQL.

De meerkoloms FULLTEXT zoeken is zo slecht nog niet.

Uw zoekopdracht ziet er ongeveer zo uit ...

 SELECT column, column
   FROM table
  WHERE MATCH(Company, FirstName, LastName, whatever, whatever) 
      AGAINST('search terms' IN NATURAL LANGUAGE MODE)

Het zal een heleboel resultaten opleveren, gerangschikt op wat MySQL vermoedt dat het het meest waarschijnlijk het eerst wordt geraakt. De gissingen van MySQL zijn niet geweldig, maar ze zijn meestal voldoende.

Je hebt een FULLTEXT . nodig index die overeenkomt met de lijst met kolommen in uw MATCH() clausule. Het maken van die index ziet er als volgt uit.

ALTER TABLE book 
ADD FULLTEXT INDEX Fulltext_search_index_1 
    (Company, FirstName, LastName, whatever, whatever);

Ondanks opmerkingen in uw vraag heeft u alleen een index nodig voor de groep kolommen die u gaat doorzoeken.

20K rijen vormen geen grote belasting voor recente-vintage serverhardware.

Spelfout:je zou SOUNDEX() kunnen proberen , maar het is een algoritme uit het begin van de 20e eeuw, ontworpen door het Bell-systeem om de namen van mensen op te zoeken in Amerikaans Engels. Het is ontworpen om veel vals-positieve treffers te krijgen, en het is echt dommer dan een emmer stenen.

Als je echt spellingcorrectie nodig hebt, moet je Sphinx misschien onderzoeken.




  1. C# Verbinding maken met Oracle DB DateTime-opmaak

  2. MySQL:procedureparameters doorgeven aan EXECUTE USING-instructie

  3. MySQL-tabel met alleen een varchar als externe sleutel

  4. Microsoft SQL Server – Doe mee met SQL Saturday Dallas