KANSAS CITY, Mo. -- It took 14 innings, but the Kansas City Royals pulled out a victory over the Cleveland Indians.

Nori Aoki singled home the winning run in the 14th inning as the Kansas City Royals topped the Cleveland Indians 2-1 Thursday night.

"It was huge," Royals manager Ned Yost said. "We were really struggling at that point to make anything happen.

The Royals (51-50) won their third consecutive game and moved a half-game above the Indians in the American League Central. Cleveland (51-51) fell for the fourth time in five games.

Aoki's one-out single scored right fielder Lorenzo Cain, who began the inning with an infield single stole second. Aoki was serving as the designated hitter for the first time in his career.

"Lo beats out an infield single and steals second and Nori comes up with the big base hit to end the ball game," Yost said. "Our bullpen was phenomenal. Our starting pitcher was phenomenal, but unfortunately so was there's. Danny (Duffy) was absolutely outstanding. Danny was unbelievable. (Corey) Kluber was unbelievable."

Aaron Crow (5-1) struck out all three batters he faced in the 14th. He was the seventh Royals pitcher. Marc Rzepczynski (0-3) allowed one run in one-plus inning.

The Indians tied the score in the ninth when catcher Yan Gomes' two-out single scored first baseman Carlos Santana, who drew a leadoff walk. Kansas City closer Greg Holland blew just his second save in 28 opportunities.

Kansas City's Mike Moustakas scored an unearned run in the eighth. The Royals third baseman stroked a fly ball double to left. When left fielder Ryan Raburn picked up the ball in foul territory, his awful throw wound up in center, allowing Moustakas to come home.

"When Moose scored the run, I thought how crazy is this," Yost said.

Raburn said it was "a tough one to swallow."

"My teammates picked me up but then we weren't able to hold on," Raburn said. "If it was a game where we were way ahead we'd have had a good laugh about it. With the way the game was playing out I don't think anybody was more mad than I was. I was coming up to throw to the infield and I saw our infielders going towards third. I tried to hold up and I couldn't. The ball slipped out of my hand."

Indians manager Terry Francona said Raburn "made a good effort and didn't catch it, and we had the shift on."

"He tried to hold up and the ball slipped out of his hand," Francona said. "It's a fluky thing. Just a lot of guys trying real hard but it didn't end up well."

Indians right-hander Corey Kluber limited the Royals to two hits and one unearned run over nine innings. Kluber, who won his first three July starts, struck out 10 and walked none.

"Maybe it's the fact that they're aggressive," Kluber said of the strikeouts. "With aggressive teams, if you execute your pitches you can have success."

He lost his perfect-game bid in the seventh on second baseman Omar Infante's single with one out. He said he thought Moustakas' eighth inning double was going foul.

"It's one of those things, one of the weird things that happens in this game," Kluber said.

Royals left-hander Danny Duffy limited the Indians to two hits and no runs before departing after 107 pitches and seven innings.

"It was a good outing by Kluber," Duffy said. "I was just trying to stay in there and compete and keep my team in the game. "It was great to see Aoki get that hit. It couldn't happen to a better guy. He put a good swing on it and laced it down the line. Cain came in with a slide home. Overall, it was just a great team win. It's something we needed big time."

Royals right-hander Wade Davis weaved his way into and out of trouble in the eighth. The Indians loaded the bases on two singles and a walk, but center fielder Michael Brantley grounded into an inning-ending double play.

Duffy, who lost his three previous starts, did not allow a baserunner until first baseman Carlos Santana led off the fifth with a single to left. Duffy walked Raburn to put two men on with no outs, but he retired the next three to pitch out of the jam, striking out Gomes and third baseman Lonnie Chisenhall to end the inning.

In the first half of the game, the only thing close to a Kansas City hit was Alex Gordon's sinking liner that Cleveland left fielder Mike Aviles caught to end the fourth.

NOTES: 1B Eric Hosmer was not in the Royals' lineup for the third time in four games because of a bruised right hand. ... Indians SS Asdrubal Cabrera has not played since exiting Monday with lower back spasms. ... The Royals sent UT Jimmy Paredes to the Baltimore Orioles for cash considerations. Paredes was designated for assignment July 16. The Royals acquired Paredes on Feb. 17 off waivers from the Orioles. He went 2-for-10 in nine games for Kansas City. ... Indians RHP Justin Masterson, who is on the disabled list due to right knee inflammation, will make a rehab start Friday for Triple-A Columbus.