It depends on how much precision you need, and how much context you have.
You could use the following reduction method to build an acronym. It's like stemming but with more brute force. Take the capital letters (or first letters) of the partial words, join them, put them to lowercase and index them:
"Johann-Sebastian-Bach-Straße" -> "jsbs"
"Johann-Sebastian-Bach-Str." -> "jsbs"
"J.-S.-Bach-Str." -> "jsbs"
"Johann-S.-Bach-Str." -> "jsbs"
"Joh.-Seb.-Bach-Str." -> "jsbs"
Note, because the code is very short, other street names will match as well, like this artificial street name
"Josef-Stefan-Baum-Str." -> "jsbs"
so it really depends how much precision you want. The more context of the street name you have, the better.
For example, for known streets, you can index the acronym code along with a city name, for example
"Joh.-Seb.-Bach-Str." -> "jsbs münchen"
Usually, you have a city name, or postal code, or other contextual information.
If the data must be verified, you can try to validate street names for existence, by a reference lookup of e.g. https://help.openstreetmap.org/questions/23488/export-streets-names
With a city name, you could disambiguate acronyms
"jsbs münchen" - > "Johann-Sebastian-Bach-Straße, München"
"jsbs giessen" - > "Johann-Sebastian-Bach-Straße, Gießen"
"jsbs köln" - > does not exist