sql >> Databáze >  >> RDS >> Mysql

Jak vyřešit dilema ukládání lidských jmen v MySQL a zachovat jak rozlišitelnost, tak vyhledávání podobných jmen?

Co je užitečné, je, pokud můžete rozložit celé jméno na složka "slova jména" a uložit fonetické kódování (metafon nebo jednu z mnoha dalších možností) pro každé z nich. Potřebujete však pouze pojem jmenných slov, nikoli je konkrétně kategorizovat jako první, střední nebo poslední, což je v pořádku, protože tyto kategorie stejně dobře nefungují napříč kulturami). Ale můžete použít informace o pořadí později v hodnocení, pokud chcete, aby hledání „Paul Carl“ odpovídalo „Paul Karl“ lépe než vyhledávání „Carl Paul“. Musíte si být vědomi nejednoznačné interpunkce, která může vyžadovat uložení více verzí některých slov názvu. Například Bre-Anna Heim by byla rozdělena do slov jména „bre“, „anna“, „breanna“ a „heim“. Někdy je pomlčka irelevantní jako Bre-Anna, ale někdy ne jako v Sally-June." Bre-Anna nikdy nepoužije jen Bre nebo Anna, ale Sally-June může někdy použít Sally nebo jen June. Je těžké vědět, které, takže pokrývají obě možnosti.

Proti tomu můžete napsat svůj dotaz tak, že podobně rozložíte a foneticky zakódujete celé jméno, které hledáte. Váš dotaz může vrátit, řekněme, ta celá jména, která mají dvě nebo více fonetických shod názvů komponent (nebo jednu, pokud je ve vyhledávání nebo ve zdroji pouze jedno jméno). Získáte tak podmnožinu celých jmen, která můžete dále zvážit. Mohli byste přijít s jejich jednoduchým žebříčkem, nebo dokonce udělat něco jako algoritmus porovnávání vzdálenosti na této podmnožině, což by bylo příliš nákladné na výpočet oproti celému milionu jmen. Když říkám porovnávání vzdálenosti, mám na mysli on-line algoritmy, jako je Levenshteinova vzdálenost a podobně.

(edit) Důvodem je řešení případů, jako je následující jméno:Maria de los Angeles Gomez-Rodriguez. Jedna osoba pro zadávání dat může zadat Maria Gomez. Další by mohla vstoupit do Maria Gomez Rodriguez. Ještě další by mohl vstoupit do Maria Angeles Rodrigus.



  1. Divize ( / ) nedává mou odpověď v postgresql

  2. Chápu správně velikost fondu Unicorn, Sidekiq a DB?

  3. Odlišné záznamy se spojeními a objednávkou

  4. Počítat řádky tabulky