Puedes usar esta solución. Esto obtiene todos los productos que contienen TODOS palabras clave 1, 23 y 54:
SELECT a.*
FROM products a
INNER JOIN product_tags b ON a.product_id = b.product_id
WHERE b.tag_id IN (1,23,54)
GROUP BY a.product_id
HAVING COUNT(1) = 3
Donde 3
es el número de elementos en su WHERE IN
lista, para que pueda ajustar según corresponda en función de la cantidad de etiquetas que desea verificar.