이것은 Magento CE 1.6 이상에서 잘 작동합니다.
$event = Mage::getSingleton('index/indexer')->logEvent(
$product,
$product->getResource()->getType(),
Mage_Index_Model_Event::TYPE_SAVE,
false
);
Mage::getSingleton('index/indexer')
->getProcessByCode('catalog_url') // Adjust the indexer process code as needed
->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)
->processEvent($event);
사용 가능한 인덱서 코드는 다음 쿼리를 사용하여 볼 수 있습니다.
SELECT indexer_code FROM index_process;
네이티브 마 젠토 1.7에는 다음이 있습니다.
+---------------------------+
| indexer_code |
+---------------------------+
| cataloginventory_stock |
| catalogsearch_fulltext |
| catalog_category_flat |
| catalog_category_product |
| catalog_product_attribute |
| catalog_product_flat |
| catalog_product_price |
| catalog_url |
| groupscatalog2_category |
| groupscatalog2_product |
| tag_summary |
+---------------------------+
Magento EE 1.13에서는 다릅니다. 인덱서는 각 cron 실행 (1 분마다)에서 변경된 항목을 자동으로 선택합니다.
최신 정보
위의 답변은 어쨌든 100 % 정확합니다. 아래 정보가 더 많은 것을 추가 할 수 있다고 생각합니다.
제품에서 속성 값을 거의 변경하지 않고 상대 색인 테이블을 자동으로 업데이트해야하는 경우이 기능을 사용할 수 있습니다.
Mage::getSingleton('catalog/product_action')->updateAttributes();
리 인덱스를 직접 관리하려면 resourse 모델을 대신 사용하십시오. Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
예를 들어 다음 기능을 사용하여 제품의 특정 속성 만 빠르게 업데이트합니다.
public function updateProductAttribute($product_id, $arrayChanges, $reindex = true)
{
if (!is_array($product_id)) {
$product_id = array($product_id);
}
// ths should trigger all required reindex
$update = Mage::getSingleton('catalog/product_action');
// Update value
if (!$reindex) {
$update = Mage::getResourceSingleton('catalog/product_action');
}
$update->updateAttributes($product_id, $arrayChanges, 0);
}
노트 :
제품 그룹에서 동일한 속성 / 값 커플 을 변경해야하는 경우 전체 제품 배열을 전달할 수 있습니다.product_ids