Fuzzy Name Matching Plug-In for Elasticsearch

Normalization is crucial to high quality search results — who wants irrelevant variations between queries and documents leading to missed hits (e.g., "celebrity" v. "celebrities")? Normalizing dictionary words works, but what if your application focuses on names? Whether you’re tackling log analysis, e-commerce, watch list screening or other applications, names are often the key. Can you find "Abdul Jabbar, Karim" if you search for “Kareem AbdalJabar” or “كريم عبد الجبار”? Applications using Elasticsearch provide some fuzziness by mixing its built-in edit-distance matching and phonetic analysis with more generic analyzers and filters (see example #1 or #2). We've tried to go beyond that to provide both better matching and a simpler integration. We use a custom Mapper and Score Function so that linguistic nuances can be handled behind-the-scenes. We'll talk about how we built this sort of plug-in for Rosette, its customization, and its connection to broader trend of entity-centric search.