sql >> Database teknologi >  >> RDS >> Mysql

Hvordan løses dilemmaet med at gemme menneskenavne i MySQL og bevare både diskriminerbarhed og en søgning efter lignende navne?

Det, der er nyttigt, er, hvis du kan dekomponere det fulde navn til komponent "navne ord" og gemme en fonetisk kodning (metafon eller et af de mange andre valg) for hver af dem. Du har dog bare brug for begrebet navneord, ikke specifikt at kategorisere det som første eller midterste eller sidste, hvilket er fint, fordi disse kategorier alligevel ikke fungerer godt på tværs af kulturer). Men du kan bruge positionsordreoplysninger senere i rangeringen, hvis du vil, så søgning efter "Paul Carl" matcher "Paul Karl" bedre end at matche "Carl Paul". Du skal være opmærksom på tvetydige tegnsætning, der kan kræve lagring af flere versioner af nogle navneord. For eksempel ville Bre-Anna Heim blive opdelt i navneordene "bre", "anna", "breanna" og "heim". Nogle gange er bindestregen irrelevant som Bre-Anna, men nogle gange ikke som i Sally-June". Bre-Anna bruger aldrig kun Bre eller Anna, men Sally-June bruger måske bare Sally eller bare June nogle gange. Det er svært at vide hvilken, så dække begge muligheder.

Du kan skrive din forespørgsel mod dette ved på lignende måde at nedbryde og fonetisk indkode det fulde navn, du søger efter. Din forespørgsel kan f.eks. returnere de fulde navne, der har to eller flere fonetiske komponentnavne (eller et, hvis der kun er ét navn i søgningen eller kilden). Dette giver dig en undergruppe af fulde navne, du kan overveje yderligere. Du kan komme med en simpel rangering af dem, eller endda gøre noget som en afstandsmatchende algoritme på denne delmængde, hvilket ville være for dyrt beregningsmæssigt at gøre i forhold til hele millionen navne. Når jeg siger distancematching, taler jeg om online-algoritmer som Levenshtein-afstand og lignende.

(rediger) Begrundelsen for dette er håndtering af sager som følgende navn:Maria de los Angeles Gomez-Rodriguez. En person, der indtaster data, kan bare indtaste Maria Gomez. En anden kan komme ind på Maria Gomez Rodriguez. Endnu en anden kan komme ind i Maria Angeles Rodrigus.



  1. Hvorfor fungerer CROSS JOIN-betingelser ikke i 'ON'-klausulen, kun WHERE-klausulen?

  2. Hvad er strengsammenkædningsoperatoren i Oracle?

  3. PHP/MySQL:Opret ny forbindelse for hver forespørgsel?

  4. Konverter output fra MySQL-forespørgsel til utf8