/** * @param IIndexable $object * @return bool */ public function deleteFromSphinx(IIndexable $object) { $id = $object->getIntId(); $index = kSphinxSearchManager::getSphinxIndexName($object->getObjectIndexName()); KalturaLog::debug('Deleting sphinx document for object [' . get_class($object) . '] [' . $object->getId() . ']'); $sql = "delete from {$index} where id = {$id}"; return $this->execSphinx($sql, $object); }
/** * @param IIndexable $object * @param bool $isInsert * @param bool $force * @return string|bool */ public function getSphinxSaveSql(IIndexable $object, $isInsert = false, $force = false) { $id = $object->getIntId(); if (!$id) { KalturaLog::err("Object [" . get_class($object) . "] id [" . $object->getId() . "] could not be saved to sphinx, int_id is empty"); return false; } // if(!$force && !$isInsert && !$this->saveToSphinxRequired($object)) // return false; $data = array('id' => $id); // NOTE: the order matters $dataStrings = array(); $dataInts = array(); $dataTimes = array(); $fields = $object->getIndexFieldsMap(); foreach ($fields as $field => $getterName) { $fieldType = $object->getIndexFieldType($field); $getter = "get{$getterName}"; switch ($fieldType) { case IIndexable::FIELD_TYPE_STRING: $dataStrings[$field] = $object->{$getter}(); break; case IIndexable::FIELD_TYPE_INTEGER: $dataInts[$field] = $object->{$getter}(); break; case IIndexable::FIELD_TYPE_DATETIME: $dataTimes[$field] = $object->{$getter}(null); break; } } // TODO - remove after solving the replace bug that removes all fields $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaSearchDataContributor'); $sphinxPluginsData = array(); foreach ($pluginInstances as $pluginName => $pluginInstance) { KalturaLog::debug("Loading {$pluginName} sphinx texts"); $sphinxPluginData = null; try { $sphinxPluginData = $pluginInstance->getSearchData($object); } catch (Exception $e) { KalturaLog::err($e->getMessage()); continue; } if ($sphinxPluginData) { KalturaLog::debug("Sphinx data for {$pluginName} [{$sphinxPluginData}]"); $sphinxPluginsData[] = $sphinxPluginData; } } if (count($sphinxPluginsData)) { $dataStrings['plugins_data'] = implode(',', $sphinxPluginsData); } foreach ($dataStrings as $key => $value) { $search = array("\\", "", "\n", "\r", "", "'", '"'); $replace = array("\\\\", "\\0", "\\n", "\\r", "\\Z", "\\'", '\\"'); $value = str_replace($search, $replace, $value); $data[$key] = "'{$value}'"; } foreach ($dataInts as $key => $value) { $value = (int) $value; $data[$key] = $value; } foreach ($dataTimes as $key => $value) { $value = (int) $value; $data[$key] = $value; } $values = implode(',', $data); $fields = implode(',', array_keys($data)); $index = kSphinxSearchManager::getSphinxIndexName($object->getObjectIndexName()); $command = 'insert'; if (!$isInsert) { $command = 'replace'; } return "{$command} into {$index} ({$fields}) values({$values})"; }