These are the indexes: https://github.com/hoytech/strfry/blob/master/golpe.yaml#L24-L47 (all the indexes have the created_at timestamp as a suffix). Now the query part I don't understand exactly how it works on strfry when you are querying for multiple different things.
I've used a similar scheme for the indexes here: https://github.com/fiatjaf/eventstore/blob/98cbffec7cc64773633c392de351586402418b7b/lmdb/helpers.go#L55-L139. But my query code is so complicated I don't even understand it myself anymore: https://github.com/fiatjaf/eventstore/blob/98cbffec7cc64773633c392de351586402418b7b/lmdb/query.go (it was simpler before, but nostr:npub1fjqqy4a93z5zsjwsfxqhc2764kvykfdyttvldkkkdera8dr78vhsmmleku complained I was using a bunch of goroutines unnecessarily so I did this and the performance has improved a lot).
But since you're starting from scratch and you're not afraid of including C dependencies on your Haskell app, I recommend trying to embed nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s's https://github.com/damus-io/nostrdb as it's made for this and more optimized for clients rather than relays.