The problem is, as you can see it from the error message, that the 2 queries has fifferent number of columns.
Your contain calls are similar, so you can be sure matching is the problemtaic part. Matching adds extra fields to the query, so that is why the first query has more fileds selected.
If you change matching to innerJoinWith you will get the same records, but no fileds wil be added to the select.