Jetpack's related posts module is very good at matching, using ElasticSearch and WordPress.com's servers. It's one of the more compelling features of Jetpack.
But I've never been a big fan because when the post doesn't have an image, the resulting output is kind of atrocious. Jeremy Herve has a nice code snippet to fix that, so that either posts without images don't show up or you can use a default image for posts without one.
I think the feature to include a default image should be an option in the admin for less code savvy users, so I proposed it on Github.
I am currently using Related Posts For WordPress on Post Status. From a display perspective, I love it. But, at least in my case, it just doesn't come close to matching Jetpack's power for matching. I may do a full review of that plugin at a later date, but this little snippet from Jeremy is tempting me to switch back to Jetpack's module.