ACL had a recent tutorial about state of the art for this topic. https://acl2023-retrieval-lm.github.io/
My favorite takeaway was that purely fine tuning your model on your documents (without extra document context during inference) consistently performs worse than using a context added from a datastore.