There is a table with the goods. There is a table with addresses where each product is available. Example
- iPhone for sale in France and Germany
- iPad only available in Paris
- iMac only sold in Berlin
When adding a product, we make a request for Nominatim OSM and get ID France and Germanium ID, and save them in the database for the iPhone. (and so on for all products) 
I think one of these IDs is preserved, but for the time being I don’t know how they differ.
Example 1
The buyer is looking for an iPhone in Paris (we get an ID from Nominatim). Problem: how to understand that the ID of Paris is a subsidiary of France ID?
Example 2
The buyer is looking for iMac in Germany (we get the ID from Nominatim). Problem: how to understand that ID Germanium is the parent ID of Berlin?
Example 3
The buyer is looking for an iPad in France (we get an ID from Nominatim). Problem: how to understand that ID Francis is the parent ID of Paris?
And there are many such examples.
I think somehow you need to keep the relationship between IDs of countries, cities and towns. The only problem is that the data in OSM is changed, and over time, accumulate garbage in the database.
Or another solution: get a polygon from the borders of each object on the map. And then through PostGis to look for the entry of a polygon into other polygons. Only here is the problem again, because the borders of one country have several thousand coordinates, and I think PostGis will find it difficult to cope with such tasks.
Goods will be in many countries, cities and towns (possibly). It is necessary to use OSM because it has already tried to keep a list of all cities and countries, and it is not very convenient. Data needs to be constantly updated. In general, this solution is not suitable.