Understanding Fuzzy Search
Shannon Stroud·Sep 17, 2019

Understanding Fuzzy Search

Shannon StroudShannon Stroud
Shannon Stroud
Shannon Stroud is a Senior Digital Marketer part of the Developer Relations Team at TomTom. She has been at TomTom since the beginning of 2019. Prior to her role at TomTom, she’s held digital marketing and communication positions at different tech companies over the last five years, where she has been responsible for social media, content creation and strategy, community building, copywriting and PR. At TomTom, she is focused on content strategy for digital channels and growing the developer community. She's a word nerd, creative and loves overusing emojis. In office, you'll find her blogging, tweeting, drinking cup after cup of coffee and watering her tiny office plant.
Sep 17, 2019 · 7 min read

TomTom maps return useful results even if you misspell a search term or provide incomplete address information. In this article we'll explain how the TomTom Search API provides "fuzzy search" results for points of interest through spell-checking, nearby search options, geometric boundary searches, route searches and more.


"Fuzzy search" is a feature of the TomTom Search API that expands the information returned to include not just exact results, but also useful results. “Fuzziness” is the default behavior of the TomTom Search API and it allows us to perform a search to find addresses and POIs that partially match a specific query.

Fuzzy search makes sure you get results to accommodate situations such as trying to look up a location search with a misspelling or an incorrect address, and it enables the TomTom Search API to provide approximate match results for queries that don't even contain an address. The fuzzy search can be effectively used to extend a query result set by adding nearby points-of-interest (POIs).

In this article we will explain:

Search and Geocoding

When you use the TomTom Search API to find a location, you're doing something called "geocoding". You're turning a description of a location into coordinates on a map. We usually think of a location as an address such as 123 Main Street. TomTom maps use more precise information to pinpoint that location: the latitude and longitude coordinates on a map. (For more information on geocoding, check out this blog post).

So, when you search for 123 Main Street, the map service typically looks that address up and returns the coordinates, the map showing where that is, and a marker pointing out the coordinates on the map.

But mobile phone keyboards are small, and typos are pretty common. What if you accidentally type "124 Main St", but that address doesn't exist? The default fuzzy search used by TomTom's API will automatically return useful nearby POIs, which is far more useful than returning nothing, even though the address I actually want is effectively right there.

The primary advantage of fuzzy search capabilities in TomTom maps is to provide a level of spell-checking assistance to search results.

Points of Interest (POI)

The term “point of interest” refers to categories of locations such as schools, hospitals, gas stations, stores, restaurants, and many other location assets you might want to look up. The data on each of the available assets is stored in a geolocation database that you can access via the TomTom Search API. To learn more about POIs, check out this article: Understanding Places and POI APIs.

Retrieving POIs for a search is a slight variation on this fuzzy search process. Rather than performing the simple geocoding itself, it allows us to extend the results that might be interesting to a user, by including the information about prominent POIs and other assets near a specific location.

In this scenario, it might be more useful to think of the results as a "nearby search" rather than a "fuzzy search."

For example, a fuzzy search or nearby search might answer user questions such as the following:

  • What landmarks are near my destination?

  • Where can I get a pizza near me right now?

  • Where is the nearest post office?

Fuzzy Search is the Default

The default behavior for TomTom’s Search API is to perform a fuzzy search by a partial match, extending a query result by adding near-match entries and nearby POIs. When you're using the TomTom Search API you don't need to do anything extra to get this valuable feature.

Developers using the TomTom Search API can specify the level of "fuzziness" expected in search results. The API accepts values from 1 to 4. The default level 2 means that the TomTom Search API will perform the normal n-gram spell-checking and find addresses, POIs and other assets is normally performed world-wide rather than a specific location. Other options are no spell checking or string-based spell checking.

There are also options for setting a minimum and maximum level of fuzziness in this case the API starts at the lowest level of spell-checking and increases the level of fuzziness up to the maximum specified level until it finds a match or matches.

Useful Search Options

There are some other options available through the TomTom Search API that allows developers to enable variations on "fuzzy search" functionality for users.

Limiting Search by Country

As we’ve already discussed, the default behavior of TomTom’s Search API is to perform a search to find the POIs and assets around the world. The API supports a countrySet attribute that limits the search results to a specific geographic region by country codes. When this attribute is set, it limits the potential search results, which may be relevant to the user. This option can also improve the performance of the search process itself.

Geometry Search

Besides the “fuzziness” parameter, TomTom’s search engine also supports the number of features, including the ability to search inside geometric boundaries. When the boundary is defined, the TomTom Search API performs a search of only those POIs and assets with coordinates in the defined area.

Nearby Search

Another efficient way of using TomTom’s Search API is to search in the neighborhood of a specific location. The Search API provides a specific endpoint just for nearby searches that will only return POI results.

Along Route Search

Sometimes, it’s also useful to search for POIs and other assets along the route being planned by a user. In this case, the TomTom Search API uses a set of transitional coordinates that pinpoint to the locations along which the route is planned, as well as a search limit and detour time. The TomTom Search API finds all possible POIs and other assets of interest that reside along the route.

Search Demonstration

For a demonstration of fuzzy search from the developer's point of view, we'll show you a simple example of using the minimum and maximum fuzziness settings, along with results from both for comparison.

To specify the “fuzziness” levels we normally have to use withMinFuzzyLevel() and withMaxFuzzyLevel() methods of the generic FuzzySearchQueryBuilder class object, accepting as an argument an integer value of either the minimal or maximal “fuzziness” level as shown in the code snippet below:

// Get the application context object 
Context appContext = getApplicationContext(); 
// Instantiate TomTom's Search API object 
SearchApi searchApi = OnlineSearchApi.create(appContext); 
// Construct fuzzy search query object with preciseness and fuzziness level params 
FuzzySearchQuery fuzzySearchQuery = FuzzySearchQueryBuilder.create("term"). 
withPreciseness(newLatLngAcc(position, STANDARD_RADIUS)). 
// Perform a fuzzy search to find POIs and assets of interest 
searchApi.search(fuzzySearchQuery, newFuzzySearchResultListener() { 
// Declare the successful search results observer callback method 
    public voidonSearchResult(FuzzySearchResponse fuzzySearchResponse) { 
// Retrieve a list of fuzzy search results 
        List<FuzzySearchResult> results = fuzzySearchResponse.getResults(); 
// Modify the recycler view adapter object by passing a list of 
// search results as an argument of its constructor 
        mAdapter = newTTSearchAdapter(results); 
// Set the new recycler view adapter object 
// Notify the recycler view object of the changes committed 
public voidonSearchError(SearchError searchError) { 
// Handle search engine exceptions 

Here’s a brief example of search query results returned by the code at the end of its execution (query: “cort” – misspelled “court”, lat: 40.7128, lon: -74.0060, place: New York, countrySet: US, radius: 1000 meters):

“Fuzziness” level 1 (the number of entries “1”):

  • (917.4m) Ceres Cafe Cort, 378 Canal St, New York, NY 10013, USA, +(1)-(917)-9652740

“Fuzziness” level 4 (the number of entries more than “5”):

  • (917.4m) Ceres Cafe Cort, 378 Canal St, New York, NY 10013, USA, +(1)-(917)-9652740}

  • (261.4m) N Y S Supreme Court Officers Associates Union Headquarters, 299 Broadway, New York, NY, USA, 10007 +(1)-(212)-4064292

  • (309.1m) Thurgood Marshall United States Courthouse, 40 Centre St, New York, NY, USA 10007, +(1)-(212)-8578500

  • (226.1m) Robilotti Dante Marshal, 1 Federal Plz, New York, NY, USA 10007, +(1)-(212)-2642812

  • (314.4m) Wireless Warehouse, 107 Chambers Street, New York, NY, USA 10007, +(1)-(212)-2270770

As you can see, the higher fuzziness level returns additional results, but even the lowest level, with no spell checking at all, returns at least one result to the user.


For more on Fuzzy Search, check out these resources:

Get the developer newsletter.
No marketing fluff. Tech content only.

* Required field. By submitting your contact details to TomTom, you agree that we can contact you about marketing offers, newsletters, or to invite you to webinars and events. We could further personalize the content that you receive via cookies. You can unsubscribe at any time by the link included in our emails. Review our privacy policy.