/** * Remove entire search index. */ public function purge() { $this->dbHandler->beginTransaction(); $query = $this->dbHandler->createDeleteQuery(); $tables = ['ezsearch_object_word_link', 'ezsearch_return_count', 'ezsearch_search_phrase', 'ezsearch_word']; foreach ($tables as $tbl) { $query->deleteFrom($tbl); $stmt = $query->prepare(); $stmt->execute(); } $this->dbHandler->commit(); }
/** * Build WordIDArray and update ezsearch_word table. * * Ported from the legacy code * * @see https://github.com/ezsystems/ezpublish-legacy/blob/master/kernel/search/plugins/ezsearchengine/ezsearchengine.php#L155 * * @param array $indexArrayOnlyWords words for object to add * * @return array wordIDArray */ private function buildWordIDArray(array $indexArrayOnlyWords) { $wordCount = count($indexArrayOnlyWords); $wordIDArray = []; $wordArray = []; // store the words in the index and remember the ID $this->dbHandler->beginTransaction(); for ($arrayCount = 0; $arrayCount < $wordCount; $arrayCount += 500) { // Fetch already indexed words from database $wordArrayChuck = array_slice($indexArrayOnlyWords, $arrayCount, 500); $wordRes = $this->searchIndex->getWords($wordArrayChuck); // Build a has of the existing words $wordResCount = count($wordRes); $existingWordArray = []; for ($i = 0; $i < $wordResCount; ++$i) { $wordIDArray[] = $wordRes[$i]['id']; $existingWordArray[] = $wordRes[$i]['word']; $wordArray[$wordRes[$i]['word']] = $wordRes[$i]['id']; } // Update the object count of existing words by one if (count($wordIDArray) > 0) { $this->searchIndex->incrementWordObjectCount($wordIDArray); } // Insert if there is any news words $newWordArray = array_diff($wordArrayChuck, $existingWordArray); if (count($newWordArray) > 0) { $this->searchIndex->addWords($newWordArray); $newWordRes = $this->searchIndex->getWords($newWordArray); $newWordCount = count($newWordRes); for ($i = 0; $i < $newWordCount; ++$i) { $wordLowercase = $this->transformationProcessor->transformByGroup($newWordRes[$i]['word'], 'lowercase'); $wordArray[$wordLowercase] = $newWordRes[$i]['id']; } } } $this->dbHandler->commit(); return $wordArray; }
/** * Begin transaction. */ public function beginTransaction() { $this->dbHandler->beginTransaction(); }