/**
  * @param string $text
  * @param string $languageCode
  * @param string $entityType
  * @param string[] $termTypes
  *
  * @return TermIndexEntry[]
  */
 private function getMatchingTermIndexEntries($text, $languageCode, $entityType, array $termTypes)
 {
     $languageCodes = array($languageCode);
     $matchedTermIndexEntries = $this->termIndex->getTopMatchingTerms($this->makeTermIndexEntryTemplates($text, $languageCodes, $termTypes), null, $entityType, $this->getTermIndexOptions());
     // Shortcut out if we already have enough TermIndexEntries
     if (count($matchedTermIndexEntries) >= $this->limit || !$this->useLanguageFallback) {
         return $matchedTermIndexEntries;
     }
     $matchedEntityIdSerializations = array();
     foreach ($matchedTermIndexEntries as $termIndexEntry) {
         $matchedEntityIdSerializations[] = $termIndexEntry->getEntityId()->getSerialization();
     }
     if ($this->useLanguageFallback) {
         $fallbackMatchedTermIndexEntries = $this->termIndex->getTopMatchingTerms($this->makeTermIndexEntryTemplates($text, $this->addFallbackLanguageCodes($languageCodes), $termTypes), null, $entityType, $this->getTermIndexOptions());
         // Remove any IndexEntries that are already have an match for
         foreach ($fallbackMatchedTermIndexEntries as $key => $termIndexEntry) {
             if (in_array($termIndexEntry->getEntityId()->getSerialization(), $matchedEntityIdSerializations)) {
                 unset($fallbackMatchedTermIndexEntries[$key]);
             }
         }
         // Matches in the main language will always be first
         $matchedTermIndexEntries = array_merge($matchedTermIndexEntries, $fallbackMatchedTermIndexEntries);
         if (count($matchedTermIndexEntries) > $this->limit) {
             array_slice($matchedTermIndexEntries, 0, $this->limit, true);
         }
     }
     return $matchedTermIndexEntries;
 }
 /**
  * @param string $search
  * @param string $language
  * @return PropertyId[]
  */
 private function getMatchingIDs($search, $language)
 {
     $termIndexEntries = $this->termIndex->getTopMatchingTerms(array(new TermIndexEntry(array('termLanguage' => $language, 'termText' => $search))), array(TermIndexEntry::TYPE_LABEL, TermIndexEntry::TYPE_ALIAS), Property::ENTITY_TYPE, array('caseSensitive' => false, 'prefixSearch' => true));
     $ids = array();
     foreach ($termIndexEntries as $entry) {
         $ids[] = $entry->getEntityId();
     }
     return $ids;
 }