Improve the speed of a BETWEEN search
I suspect the indexes are not chosen by the optimizer because they have the column created_at (which is a timestamp?) but the query is converting it to date.

I suggest you either create an index on (project_id, engine_id, type_id, created_at::date) or just keep the index on (project_id, engine_id, type_id, created_at) and change the condition to:

 AND created_at &gt;= now()::date - 14 
 AND created_at &lt; now()::date + 1





You can use current_date instead of now()::date.
I can't think of any situation where the (project_id, engine_id, type_id, created_at ASC, created_at DESC) would be useful. Drop this one.
About the two other indexes, (..., created_at ASC) and (..., created_at DESC), either one would be ok for the query (with the changed condition). I suggest you keep only one of them, unless you have other queries that need both.