public function deleteLocation($locationId, $contentId)
{
// 1. Update (reindex) all Content in the subtree with additional Location(s) outside of it
$ast = array('filter' => array('and' => array(0 => array('nested' => array('path' => 'locations_doc', 'filter' => array('regexp' => array('locations_doc.path_string_id' => ".*/{$locationId}/.*")))), 1 => array('nested' => array('path' => 'locations_doc', 'filter' => array('regexp' => array('locations_doc.path_string_id' => array('value' => "@&~(.*/{$locationId}/.*)", 'flags' => 'INTERSECTION|COMPLEMENT|ANYSTRING'))))))));
$response = $this->gateway->findRaw(json_encode($ast), $this->contentDocumentTypeIdentifier);
$result = json_decode($response->body);
$documents = array();
foreach ($result->hits->hits as $hit) {
$documents[] = $this->mapper->mapContentById($hit->_id);
}
$this->gateway->bulkIndex($documents);
// 2. Delete all Content in the subtree with no other Location(s) outside of it
$ast['filter']['and'][1] = array('not' => $ast['filter']['and'][1]);
$ast = array('query' => array('filtered' => $ast));
$response = $this->gateway->findRaw(json_encode($ast), $this->contentDocumentTypeIdentifier);
$documentsToDelete = json_decode($response->body);
foreach ($documentsToDelete->hits->hits as $documentToDelete) {
$this->gateway->deleteByQuery(json_encode(['query' => ['match' => ['_id' => $documentToDelete->_id]]]), $this->contentDocumentTypeIdentifier);
$this->gateway->deleteByQuery(json_encode(['query' => ['match' => ['content_id_id' => $documentToDelete->_id]]]), $this->locationDocumentTypeIdentifier);
}
}