$search filter not working for words with spaces in them

I’m using Atlas Search and the $search pipeline stage and using a filter with the compound operator. The relevant section of my pipeline looks like this:

{
    "$search":{
        "index":"my_search",
        "compound":{
            "filter":[{
                "text":{
                    "path":"address.area",
                    "query":["Vale","St. Paul"]
                }
            }]
        }
    }
}

When testing the query the results are correct when I use one or more string values containing a single word, such as “Vale”. However, when I use a string containing a whitespace such as “St. Paul” instead of filtering results I get ALL items from all counties returned. It’s like it’s either ignoring it or doing some kind of fuzzy matching even though it is a filter and no fuzzy search is set.

Can anyone provide any insight as to why that is the case and how I may resolve it?

Thanks.

I managed to resolve the issue. It was down to the search analyzer. By default I was using the Standard analyzer. This analyzer “divides text into terms based on word boundaries”.

So when it saw a word boundary such as “St. Paul” it was breaking the words up into separate “tokens”: “St.” and “Paul”. As I have a few area names starting with “St.” it was returning all of those that matched. This explains why it was working with single-word terms but not multi-word.

To resolve the issue I set the Keyword analyzer only on the field in question. The Keyword analyzer “accepts a string or array of strings as a parameter and indexes them as single terms. Only exact matches on the field are returned.” This is the behaviour I needed as I was passing the exact phrase.

With the Keyword analyzer applied to the field the search returned the correct results.

4 Likes

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.