BALTIMORE — The Baltimore Orioles flailed away at balls that floated over the plate, seeking desperately to make contact with pitches that veered every which way.
It proved to be a futile exercise.
Knuckleballer Steven Wright allowed only four hits in his third straight complete game, and the Orioles allowed three homers Monday in a 7-2 loss to the Boston Red Sox.
Mixing a fluttering knuckler with a contrasting 85 fastball, Wright struck out seven and worked around five walks in keeping the hard-hitting Orioles at bay.
"It was a challenge. He had great stuff today," Baltimore's Mark Trumbo said. "It never ended up where it started. You can't really predict where to swing. You just hope that you get one that maybe doesn't move quite as much."
Before the game, Orioles manager Buck Showalter explained the process of hitting a knuckleball this way: "It's like swatting a butterfly with a needle."
Using bats made the chore no less simple.
Wright threw a 122-pitch masterpiece, the only flaw a two-run fifth inning in which Baltimore pulled into a 2-2 tie.
The deadlock lasted only until Jackie Bradley led off the sixth with a home run off Tyler Wilson (2-4).
David Ortiz opened the eighth with his 14th home run and Marco Hernandez added a three-run shot to send many in the crowd of 43,926 up the exit ramps. Hernandez's first major league homer came in his 10th game.
Earlier, Xander Bogaerts extended his hitting streak to 23 games and picked up a pair of RBIs for the Red Sox, who took a two-game lead over second-place Baltimore in the AL East.
Ryan Flaherty doubled in a run and scored one for the Orioles, who have lost six of eight.
Wilson gave up three runs and eight hits over 6 2-3 innings in losing his third straight start.
Limited to an infield hit over the first four innings, Baltimore temporarily solved Wright's fluttering knuckler in the fifth. Nolan Reimold tripled, Flaherty doubled, Caleb Joseph snapped an 0-for-19 skid with a single and Adam Jones delivered a sacrifice fly.
"They're a very aggressive team. They're all really good hitters," Wright said. "In that inning they scored the two runs, I think I kind of got caught up in the same speed."
Boston got a first-inning run when Mookie Betts scored from second base on Bogaerts' dribbler down the third-base line. Bogaerts was thrown out, but neither Wilson nor Joseph, the catcher, got back to cover the plate. Replays indicated the ball bounced off Bogaerts' foot in foul ground, but such plays are not reviewable.
Bogaerts knew the ball should have been called foul, but learned from experience to run it out.
"We had a play back at home, same play. I stood at home, the ball hit me, and they threw to first, out," he said. "I told the umpire the ball hit me, and he said, 'No, you're out.' This time I'm running, you know. And it worked out for an RBI."
Bogaerts hit a run-scoring double in the third following singles by Betts and Dustin Pedroia.
Red Sox: Bogaerts' two doubles increased Boston's major-league leading total to 133, but Ortiz's career-high run of six straight games with a double came to an end.
Orioles: Flaherty's fifth-inning double was his second in 61 at-bats this season and produced his second RBI.
Red Sox: Placed on the concussion list May 20, utility man Brock Holt has ramped up his baseball-related activities. But there is no timetable for his return, manager John Farrell said. ... Ortiz returned after sitting out Sunday's game in Toronto with a sore left foot.
Orioles: RHP Yovani Gallardo (shoulder tendinitis) will begin his rehabilitation assignment on Thursday and with 40-60 pitches in a minor league game. ... SS J.J. Hardy (broken foot) will have a CT scan Friday. He hopes to be cleared to begin baseball-related activities.
Red Sox: Eduardo Rodriguez (right knee) comes off the disabled list to make his season debut, starting on the mound Tuesday night against the organization that drafted him. Rodriquez went 0-3 in five rehab starts with Triple-A Pawtucket. After the game, Boston sent reliever Heath Hembree to the minors to make room for Rodriguez.
Orioles: Starting for the eighth time this season, Kevin Gausman (0-2, 3.24 ERA) makes another run at his first win.