/**
  * @param Suggestion[] $suggestions
  * @param string $language
  * @return array[]
  */
 public function createResultArray(array $suggestions, $language)
 {
     $entries = array();
     $ids = array();
     foreach ($suggestions as $suggestion) {
         $id = $suggestion->getPropertyId();
         $ids[] = $id;
     }
     //See SearchEntities
     $terms = $this->termIndex->getTermsOfEntities($ids, null, array($language));
     $clusteredTerms = $this->clusterTerms($terms);
     foreach ($suggestions as $suggestion) {
         $id = $suggestion->getPropertyId();
         $entries[] = $this->buildEntry($id, $clusteredTerms, $suggestion);
     }
     return $entries;
 }
 /**
  * @param EntityId[] $entityIds
  * @param string[]|null $termTypes
  * @param string[]|null $languageCodes
  *
  * @return TermIndexEntry[]
  */
 private function getTermsOfEntities(array $entityIds, array $termTypes = null, array $languageCodes = null)
 {
     $entityIdGroups = $this->splitPageEntityMapByType($entityIds);
     $terms = array();
     foreach ($entityIdGroups as $entityIds) {
         $terms = array_merge($terms, $this->termIndex->getTermsOfEntities($entityIds, $termTypes, $languageCodes));
     }
     return $terms;
 }
 /**
  * Loads a set of terms into the buffer.
  * The source from which to fetch would typically be supplied to the buffer's constructor.
  *
  * @param EntityId[] $entityIds
  * @param string[]|null $termTypes
  * @param string[]|null $languageCodes
  *
  * @throws StorageException
  */
 public function prefetchTerms(array $entityIds, array $termTypes = null, array $languageCodes = null)
 {
     if (empty($entityIds)) {
         return;
     }
     // We could first check what's already in the buffer, but it's hard to determine which
     // entities are actually "fully covered" by the cached terms. Also, our current use case
     // (the ChangesListInitRows hook) would generally, trigger only one call to prefetchTerms,
     // before any call to getTermsOfType().
     $entityIdsByType = $this->groupEntityIds($entityIds);
     $terms = array();
     foreach ($entityIdsByType as $entityIdGroup) {
         $terms = array_merge($terms, $this->termIndex->getTermsOfEntities($entityIdGroup, $termTypes, $languageCodes));
     }
     $bufferedKeys = $this->setBufferedTermObjects($terms);
     if (!empty($languageCodes)) {
         $this->setUndefinedTerms($entityIds, $termTypes, $languageCodes, $bufferedKeys);
     }
 }