public function search($query)
    {
        $results = new ResultCollection();

        foreach ($this->engines as $eachEngine) {
            if (!$eachEngine->supports($query)) {
                continue;
            }

            if ($more = $eachEngine->search($query)) {
                if (!is_array($more) and !$more instanceof \Traversable) {
                    throw new DomainException('The returned result set is not traversable.');
                }

                foreach ($more as $eachResult) {
                    $results->add($eachResult);
                }
            }
        }

        return $results;
    }