Po bitwie pod Ostrołęką korpus Giełguda ruszył na Litwę i skierował się na Rajgród. Także Osten-Sacken otrzymał rozkaz opanowania Łomży i z tego powodu o świcie 29 maja opuścił umocnienia. Rankiem niedaleko wsi Miecze Rosjanie wpadli na straż przednią Giełguda i zaskoczeni ponieśli duże straty. Osten-Sacken cofnął się do Rajgrodu. W kolejnej fazie bitwy wojska polskie zdobyły miasto Rajgród i zaczęły obchodzić lewe skrzydło sił rosyjskich. W tej sytuacji Osten-Sacken postanowił dokonać odwrotu na Augustów.
Straty wojsk carskich wyniosły 800 zabitych i 1200 wziętych do niewoli. Straty polskie były wielokrotnie mniejsze.
Było to ważne strategiczne zwycięstwo Polaków, ponieważ Rosjanie, zmuszeni do odwrotu, odsłonili im drogę na Litwę, gdzie od lutego działała już polska partyzantka.