/** * Loads a list of entries for the specicifies parameters, returns an array of Search_Backend_Data * * @return array */ public function load() { $entries = array(); $data = $this->db->fetchAll("SELECT * FROM search_backend_data" . $this->getCondition() . $this->getGroupBy() . $this->getOrder() . $this->getOffsetLimit(), $this->model->getConditionVariables()); foreach ($data as $entryData) { if ($entryData['maintype'] == 'document') { $element = Document::getById($entryData['id']); } else { if ($entryData['maintype'] == 'asset') { $element = Asset::getById($entryData['id']); } else { if ($entryData['maintype'] == 'object') { $element = Object_Abstract::getById($entryData['id']); } else { Logger::err("unknown maintype "); } } } if ($element) { $entry = new Search_Backend_Data(); $entry->setId(new Search_Backend_Data_Id($element)); $entry->setFullPath($entryData['fullpath']); $entry->setType($entryData['type']); $entry->setSubtype($entryData['subtype']); $entry->setUserOwner($entryData['userowner']); $entry->setUserModification($entryData['usermodification']); $entry->setCreationDate($entryData['creationdate']); $entry->setModificationDate($entryData['modificationdate']); $entry->setPublished($entryData['published'] === 0 ? false : true); $entries[] = $entry; } } $this->model->setEntries($entries); return $entries; }
protected function postUpdateElement(Element_Interface $element) { $searchEntry = Search_Backend_Data::getForElement($element); if ($searchEntry instanceof Search_Backend_Data and $searchEntry->getId() instanceof Search_Backend_Data_Id) { $searchEntry->setDataFromElement($element); $searchEntry->save(); } else { $this->postAddElement($element); } }
/** * @param Element_Interface $element * @return Search_Backend_Data */ public static function getForElement($element) { $data = new Search_Backend_Data(); $data->getResource()->getForElement($element); return $data; }
// clear all data $db = Pimcore_Resource::get(); $db->query("TRUNCATE `search_backend_data`;"); $elementsPerLoop = 100; $types = array("asset", "document", "object"); foreach ($types as $type) { $listClassName = ucfirst($type) . "_List"; $list = new $listClassName(); $elementsTotal = $list->getTotalCount(); for ($i = 0; $i < ceil($elementsTotal / $elementsPerLoop); $i++) { $list->setLimit($elementsPerLoop); $list->setOffset($i * $elementsPerLoop); echo "Processing " . $type . ": " . ($list->getOffset() + $elementsPerLoop) . "/" . $elementsTotal . "\n"; $elements = $list->load(); foreach ($elements as $element) { try { $searchEntry = Search_Backend_Data::getForElement($element); if ($searchEntry instanceof Search_Backend_Data and $searchEntry->getId() instanceof Search_Backend_Data_Id) { $searchEntry->setDataFromElement($element); } else { $searchEntry = new Search_Backend_Data($element); } $searchEntry->save(); } catch (Exception $e) { Logger::err($e); } } Pimcore::collectGarbage(); } } $db->query("OPTIMIZE TABLE search_backend_data;");