I have just discovered that must and must_not in bool queries can be arrays. The documentation page doesn't say this and all the examples show an object for these and an array for should, so I assumed that was what it should be and have been constructing conjunctions with should and minimum_should_match, and sometimes additional bools.
Would it be possible to update the documentation (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html ) to show this is possible, thanks.