/** * @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; }