Rafael Crivellaro proved to be the danger man early in the game. His corner-kick in the fifth minute met Goian inside the box whose effort was saved by goalkeeper Mohammad Nawaz.
The Brazilian forward got on to a loose ball inside the box in the sixteenth minute and struck a powerful volley towards goal that required a good punch from Nawaz. Four minutes later, Seiminlen Doungel tripped Edwin Vanspaul outside the box and Crivellaro's free-kick sailed over the crossbar.
After a slow start, Goa created an opening after the half an hour mark when Ferran Corominas charged forward through the middle to initiate a quick breakaway. The striker found Manvir Singh's run, who then laid the ball off for Seriton Fernandes to shoot. Goalkeeper Vishal Kaith was alert to the danger and produced a good low save.
Doungel was at fault again for a clumsy foul at the edge of the box, this time on Crivellaro. The Brazilian curled his free-kick around the wall and beat the keeper but the post denied the striker a goal before the break.
A confident Chennaiyin finally got the deserving lead from a set-piece. A freekick was lobbed inside the box where the goalkeeper rushed out to catch and missed, allowing Lucian to leap high and head home for the opener.
Chennaiyin doubled their lead through a brilliant goal from Thapa, who was fed just outside the box by Jerry Lalrinzuala. Thapa took a couple of touches before unleashing a shot from outside the box that found the top corner, leaving the keeper with no chance.
The hosts punished bad defending by Goa and added two goals before the end of 90 minutes. Nerijus Valskis executed a fine give-and-go on the left flank, dribbled to the byline and delivered the ball across the face of the goal for Eli Sabia who placed the ball into the net.
Thapa set Chhangte up inside the box with a simple pass and the Indian winger struck the ball hard into the net to score Chennaiyin's fourth goal as Goa looked shell-shocked. The visitors, however, pulled a goal back in the 85th minute to keep the contest alive. Goian failed to clear a lofted ball into the box by Jahouh and it fell to substitute Saviour who found the net with an easy finish.