Vous avez raison de dire que la "valeur par défaut" pour spécifier plusieurs champs dans une requête est que chaque champ sert de filtre conditionnel, et est donc une opération ET.
Vous pouvez effectuer des requêtes MongoDB avec une clause OR en utilisant l'opérande $or qui a la syntaxe suivante :
db.col.find({$or:[clause1, clause2]})
Où chaque clause peut être une requête. $or ne doit pas nécessairement être un opérande de niveau supérieur, mais si c'est le cas, MongoDB peut utiliser un index pour chaque clause séparée.
Dans votre exemple vous voulez vous retrouver avec cette requête :
db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]});
Qui peut être construit en Java via :
DBObject clause1 = new BasicDBObject("post_title", regex);
DBObject clause2 = new BasicDBObject("post_description", regex);
BasicDBList or = new BasicDBList();
or.add(clause1);
or.add(clause2);
DBObject query = new BasicDBObject("$or", or);