public function searchRelatedEpisodes(Episode $episode, $numberResults = 5) { $tagtext = implode(" ", $episode->getTags()->toArray()); $boolQuery = new \Elastica\Query\BoolQuery(); $multiquery = new \Elastica\Query\MultiMatch(); $multiquery->setFields(['name', 'description', 'series']); $multiquery->setQuery($tagtext); $multiquery->setType(\Elastica\Query\MultiMatch::TYPE_MOST_FIELDS); $boolQuery->addMust($multiquery); $activeQuery = new \Elastica\Query\Term(); $activeQuery->setTerm('is_active', true); $boolQuery->addMust($activeQuery); $excludeEpisodeQuery = new \Elastica\Query\Term(); $excludeEpisodeQuery->setTerm('id', $episode->getId()); $boolQuery->addMustNot($excludeEpisodeQuery); return $this->episodeFinder->find($boolQuery, $numberResults); }