You could have only one index with records following this structure:
// other product attributes
"favorited_by": ["user1", "user42", ...]
The idea is then to do two queries on the front-end. One with the index being filtered by a specific user, the other one being regular. Then you join both arrays of hits.
There’s a drawback to this method, I wouldn’t recommend having an array bigger than 1k users.
If we go back to React InstantSearch, you could have one
<InstantSearch> component containing a virtual menu with the user as a
defaultRefinement and a custom hit component keeping track of those hits through the state of the App.
// ... regular widgets
Does it makes sense?