마젠토의 수동 인덱싱 제어

마젠토의 인덱싱 기능은 마젠토의 전체적인 성능을 향상시키는데 큰 역할을 합니다.
인덱싱을 사용함으로써 얻을수 있는 장점은 제품의 데이터와 검색 인덱스는 물론, 속성(attribute), 가격(price), URL 규칙(url rewrite), 재고관리(stock) 까지 많은 부분을 미리 간단한 형식의 데이터로 변환시켜 놓음으로써 페이지의 로딩속도와 전체적인 퍼포먼스를 향상시켜 줍니다.
이러한 인덱스 기능은 관리자 모드에서 손쉽게 조절할수 있지만, 개발자로써 모듈개발이나 마젠토의 기능을 수정할때 이러한 인덱스 기능을 제한적으로 꺼야한다거나 다시 켜야할때 그리고 모든 항목을 자동으로 인덱스해야 할때가 종종 있습니다.
특히 제품을 한번에 왕창 업로드 한다던지, 3rd party와 연계되어 제품정보를 실시간으로 업데이트 시킬때 등등 유용하게 사용되는데요, 그럴때마다 수동으로 마젠토의 관리자 모드로 들어가 직접 인덱스 기능을 컨트롤 할수는 없습니다.
그렇기 때문에 아래의 코드는 간단하지만 모듈이나 크론잡(Cronjob)에서 상당히 유용하게 쓰입니다.

마젠토 인덱스 프로세스의 종류는 9가지 종류가 있는데 관리자 모드에서 System > Index Management에서 인덱싱 제어가 가능하구요, 인덱싱의 종류는 아래 테이블을 참고하세요.

아이디 코드 프로세스 이름
1 catalog_product_attribute Product Attributes
2 catalog_product_price Product Prices
3 catalog_url Catalog URL Rewrites
4 catalog_product_flat Product Flat Data
5 catalog_category_flat Category Flat Data
6 catalog_category_product Category Products
7 catalogsearch_stock Catalog Search Index
8 cataloginventory_stock Stock Status
9 tag_summary Tag Aggregation Data

위에 나열된 인덱스 프로세스 각각의 아이디와 코드를 사용해서 아래와같이 제어가 가능합니다.

아이디를 사용해 인덱스 프로세스 불러오기

1
2
3
4
5
6
7
8
<?php
// 프로세스 로딩
$process_id = 1; // catalog_product_attribute
$process = Mage::getModel('index/process');
$process->load($process_id);
// reindex
$process->reindexAll();
?>

프로세스 코드를 사용해 인덱스 프로세스 불러오기

1
2
3
4
5
6
7
<?php
// 프로세스 로딩: process id - 1
$process = Mage::getModel('index/indexer');
$process->getProcessByCode('catalog_product_attribute');
// reindex
$process->reindexAll();
?>

프로세스를 “Update on Save”나 “Manual Update”로 바꾸기:
(“Update on Save/Manual Update”은 마젠토 관리자 모드의 Index Management에서 Index Mode를 바꾸는데 나오는 옵션입니다)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// 프로세스 로딩
$process_id = 2; // catalog_product_price
$process = Mage::getModel('index/process');
$process->load($process_id);

// Manual Update
$process->setMode(Mage_Index_Model_Process::MODE_MANUAL);
$process->save();

// Update on Save
$process->setMode(Mage_Index_Model_Process::MODE_REAL_TIME);
$process->save();
?>
1 reply
  1. Mijin Kim
    Mijin Kim says:

    혹시 one product indexing 도 실질적으로 가능할까요?
    뭐 product save after 같은 이벤트를 사용해서 observer를 만든다면요?

    Reply

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *