https://machinelearningmastery.com/understanding-rag-part-vi-effective-retrieval-optimization/