To handle relation in Elasticsearch is a difficult problem and there are some limitation and trade-off between strategies.
This is only my suggestion and there could be other ways.
- create 2 indices
- user index (the same as now)
- request relation index (just as in Google Bigtable)
- use pivot transform function to create an index for search
- source both indices above
- group by user_id
- one aggregation is top_hit bucket aggregation with filter aggregation on user index which may hit only one user document per bucket.
- one aggregation is something like "unique values aggregation" with filter aggregation on request relation index
you can balance the performance with some transform settings.