Searching Telegram for `hiring` returns posts about hiring a cab
Telegram's search stems words rather than matching substrings, so it returns morphological relatives of your term. Filtering them out afterwards is free, and it has to happen before billing.
Telegram's server-side search matches word stems rather than substrings, so a query for `hiring` also returns posts containing `hire`, including a post that says hire a cab. Those are genuine matches by Telegram's rule and false positives by yours. This Actor removes them before delivery with `exactMatch`, which is on by default, costs nothing, and — the part that matters commercially — means a discarded candidate is never charged. Stemming is also why searching for a technology name works far better than searching for an everyday English word.
Key points
Telegram's search matches stems, so `hiring` matches `hire`, and the results are correct by Telegram's rule and wrong by the user's.
`exactMatch` removes those candidates before delivery and they are never charged, so the false-positive rate does not reach the invoice.
Filtering happens after Telegram has already narrowed the set, so it costs no extra request — the candidates were in the response either way.
Stemming behaves very differently across languages, which is one reason a technology name searches better than an everyday word in a mostly non-English catalogue.
Turning exact match off is a legitimate choice when you want the morphological family — but then the family is what you pay for.
A search for hiring returned a post that says hire a cab. It is not a bug, and understanding why it happens is what tells you when Telegram's search will serve you and when it will not.
What stemming does to a query
Telegram's search indexes word stems rather than raw strings. hiring, hire, hired and hires reduce to the same stem, so a query for one of them matches all of them. Substring matching would behave completely differently: hire would match hireling and would not match hiring.
The example that named the problem
A job-channel search for hiring is meant to surface postings. It also surfaces anything using the verb in an unrelated sense, and the transport example is the one that made the behaviour obvious rather than the one that occurs most.
For a technology term this barely matters — react has few morphological relatives in a technical corpus. For an ordinary English verb it matters a lot.
Why filtering is free
The candidates arrive in Telegram's response either way. Checking each one against the exact term happens locally, on data already fetched, so exactMatch costs no additional request and no additional time worth measuring.
The billing consequence
This is the same principle behind pay-per-event pricing generally: the unit you charge for should be the unit the customer wanted.
Stemming across languages
Stemming rules are language-specific, and the curated catalogue is mostly not in English. A technical term stays in the Latin alphabet inside an Arabic or Persian post and behaves predictably; an English word competes with the stemming rules of whatever language surrounds it. That is the practical reason to search for the technology rather than the phrasing.
Frequently asked questions
▸Why does Telegram return posts that do not contain my term?
They do contain it, by Telegram's rule: its search matches word stems rather than substrings, so `hiring` and `hire` share a stem and both match. The mismatch is between Telegram's definition of a match and yours.
▸Am I charged for false positives?
No. With `exactMatch` on, which is the default, candidates that fail the exact check are discarded before delivery and are never billed. Charging for them would make the site's own filtering a revenue source, which is the wrong incentive to build in.
▸Should I ever turn exact match off?
Yes, when the morphological family is what you want — tracking every form of a verb, for instance. It costs nothing to leave on and nothing to turn off; what changes is which rows count as delivered.
Sources
Every URL below was requested and returned a page on the date shown.
Documents, voice notes, audio, stickers, locations and round videos never appeared once in the anonymous preview. Fields that would always be false were cut rather than shipped.
Reading a channel's history to find 20 posts about one term took 25 requests and 712 KB. Asking Telegram to filter took 1 request and 24 KB. Same 20 results.
A walkthrough of reading public Telegram channels anonymously: the four modes, when search beats reading a history, and what the anonymous preview does and does not render.