guide
Why streaming search cannot find the movie you just typed
Leads the technical side. The Filmatic app was his idea, and he created the algorithm and the framework the app runs on.
8 min read

You know the movie exists. You know it is on the service, because someone told you so this morning. You type the name, and the app returns a documentary about beekeeping.
This is usually read as the app being stupid. It is more specific than that. A search box is not looking for a movie. It is looking for a string, and there are four separate places where the string you typed and the string it stored fail to meet.
A search box does not look for movies
When you type into a streaming app, nothing in the system knows you mean a movie. It receives text. Somewhere there is a table of titles, and the job is to decide which rows resemble your text closely enough to show you.
That framing explains most of what follows. Every failure below is a failure of text matching, and none of them require the catalogue to be missing the movie.
Tokens, and why word order stops mattering
The first thing that happens to your query is that it gets chopped up. “The Grand Budapest Hotel” becomes four tokens, or three if the analyser drops “the” as too common to be worth storing.
Each token is then scored against the index. The scoring function most search infrastructure inherits is BM25, built on the probabilistic retrieval framework of Stephen Robertson and Karen Spärck Jones and presented publicly as Okapi at TREC-3 in 1994. It rewards rare words, discounts common ones, and adjusts for how long each stored title is.
BM25 is good at what it does. Notice what it discards. Once the query is a bag of scored tokens, the order is gone, and so is any sense that these words form a name. “Hotel Budapest” scores well. So does an unrelated movie with “Grand” and “Hotel” in the title.
The typo problem has a price tag
You would expect one wrong letter to be survivable, and it often is not.
Tolerating a typo means the system has to measure how far your text sits from a candidate title. The standard measure is edit distance, defined by Vladimir Levenshtein in a 1966 paper on binary codes, counting the insertions, deletions and substitutions needed to turn one string into another. “Inglorious” is one edit from “Inglourious”.
The catch is cost. Exact matching is a lookup. Fuzzy matching is a comparison against many candidates, and it runs on every keystroke of every user. So it gets rationed. Some apps apply it only to short queries, some only after an exact match has already failed, some not at all on the cheapest tier of their infrastructure. Whether your typo is forgiven is a budget decision that was made long before you made the typo.
The same character, stored two ways
This one is invisible and it decides whether you get any result at all.
Take the accented e in Amélie. Unicode can store that as a single code point, or as a plain e followed by a separate combining accent. Both render identically on your screen. As raw bytes they are not equal, so a naive comparison between one form and the other fails completely.
Unicode Standard Annex 15 defines the normalisation forms that resolve this, NFD, NFC, NFKD and NFKC, so that equivalent strings reduce to one representation before anything compares them. An index that normalises and a query that does not, or the reverse, will silently miss. And a system that never folds accents at all will refuse to match “Amelie” against “Amélie”, which is what most people actually type.
The movie has more than one name
Here is the one that catches the most people, and it is not really a search bug at all.
A movie is not sold under one title. It is sold under a different title in nearly every market that
licensed it, and the differences are rarely translations. TMDB exposes this per movie at
/3/movie/{movie_id}/alternative_titles, filterable by country, and a well travelled movie will often
return dozens of entries.
Now consider what an app has to do with that. It can index one title per movie, which is cheap and means the other names simply do not exist as far as search is concerned. Or it can index all of them, which multiplies the index, and drags in near-duplicates that make unrelated movies collide.
Most apps index one. If the one they picked is not the one you know the movie by, the movie is present in the catalogue and absent from the search box at the same time.
Two failures that look identical
When a search returns nothing, you have learned less than it feels like you have.
Either the movie is not licensed in your country, which is a rights question and no amount of better typing will fix it, or it is right there under a name or a spelling the index did not connect to your query. From the outside these produce the same empty screen.
The first case is its own subject, and the reason it is harder than it sounds is covered in why streaming availability data is wrong and in why movies disappear from streaming. This article is about the second case, which is the one that feels unfair.
Search is not recommendation
It is worth separating these, because a single search box is usually asked to do both jobs and does neither well.
Search is a lookup. You have a specific movie in mind and the only question is whether the text you typed reaches the record. Recommendation is a judgement about what you would enjoy, and it fails in a completely different way, which we wrote about in why every “movies like this” list shows the same movies.
An empty search result is a broken lookup. A dull recommendation is a broken judgement. Fixing one does nothing for the other.
Getting a result out of a box that is failing you
None of this is unavoidable from where you are sitting.
Use the original title. The name the movie was released under at home is the one most likely to be the single title an app chose to index. It beats the translated name more often than you would expect.
Strip the accents and the punctuation. These are the parts most likely to be handled inconsistently, and plain ASCII is the version nearly every index can match.
Search a person instead of the movie. Directors and cast usually sit in a different index with different rules, so a search for the director often surfaces a movie whose title will not come up.
Use fewer words, and rarer ones. BM25 rewards uncommon tokens. One distinctive word from the title will usually outperform the full name typed carefully.
Stop searching app by app. If the question is really “where can I watch this tonight”, checking four services in turn is four chances to hit the same class of failure. A tool that resolves the movie once and then answers the availability question across services is asking a better question than the search box was ever designed to answer.
Questions
Why can I not find a movie I know is on the service?
Two different failures look identical from the outside. Either the movie is genuinely not in your country's catalogue, which is a licensing question rather than a search one, or it is there under a name the search box does not connect to what you typed. A movie can carry a different official title in every market it was sold into, and most apps index one of them.
Why does search fail when I get one letter wrong?
Because exact matching is cheap and forgiving matching is not. Tolerating a typo means measuring how far your text sits from candidate titles, using an edit distance of the kind Levenshtein defined in 1966. Running that across a catalogue on every keystroke costs real compute, so many apps apply it only to short queries or skip it altogether.
Do accents and other special characters really matter?
They can decide whether you get a result at all. The same visible character can be stored two ways in Unicode, as a single code point or as a letter plus a combining mark, and those are not equal as raw bytes. Unicode Standard Annex 15 defines the normalisation forms that make them comparable. An app that skips that step fails on any title carrying an accent.
Is search the same thing as recommendation?
No, and treating them as one problem is why both disappoint. Search answers whether a string of text matches a record. Recommendation answers what you would enjoy. A search box returning nothing has failed at a lookup, whereas a recommendation returning something dull has failed at a judgement. Different problems, different fixes.
Why does the same search work on one service and fail on another?
Each service builds its own index over its own catalogue with its own settings. How the text is split into tokens, which language analysers run, whether alternate titles are loaded at all, and how much typo tolerance is affordable are separate decisions in each case. Two apps holding the same movie can disagree about whether your query matches it.
What is the fastest way to find a movie that will not come up?
Try the original title rather than the translated one, because that is the version most likely to be stored. Drop the accents and the punctuation, since those are handled inconsistently. Search the director or a lead actor instead, which usually runs through a different index. And check something that tracks availability across services rather than searching each app in turn.
Keep reading

guide
Why dialogue is so quiet when you stream movies, and how to fix it
Quiet voices, loud explosions. How studios mix movies, how streaming services measure loudness, how TVs fold sound to stereo, and what fixes it.

guide
Why streaming apps forget where you stopped
You stopped at the reveal and it resumes ten minutes earlier, or at the start. Not a fault in your account. It is how your position is stored and synced.

guide
Why streaming picture quality drops in the middle of a movie
The image goes soft in a dark scene and sharpens again a minute later. Your connection did not change. What changed was the version of the movie you were sent.