রিইন্ডেক্স একক পণ্য


10

আমি আপডেটের পরে একটি একক পণ্য পুনর্নির্দেশ করতে চাই।

এখন আমি ব্যবহার:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'foobar');
// edit something
$product->save();

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
$stockItem->setForceReindexRequired(true);

Mage::getSingleton('index/indexer')->processEntityAction(
    $stockItem,
    Mage_CatalogInventory_Model_Stock_Item::ENTITY,
    Mage_Index_Model_Event::TYPE_SAVE
);

$product
    ->setForceReindexRequired(true)
    ->setIsChangedCategories(true);

Mage::getSingleton('index/indexer')->processEntityAction(
    $product,
    Mage_Catalog_Model_Product::ENTITY,
    Mage_Index_Model_Event::TYPE_SAVE
);

কিন্তু এই কাজ করে না, কোন ধারণা?

PS: $product->getId()বিদ্যমান এবং সঠিক।

উত্তর:


11

এটি ম্যাজেন্টো সিই 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;

নেটিভ ম্যাজেন্টো ১.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               |
+---------------------------+

ম্যাজেন্টো EE 1.13 এ এটি আলাদা, সেখানে সূচক স্বয়ংক্রিয়ভাবে প্রতিটি ক্রোন রান (প্রতি মিনিটে) পরিবর্তিত সংস্থাগুলি তুলবে।

হালনাগাদ

উপরের উত্তরটি যাইহোক 100% সঠিক, আমি মনে করি নীচের তথ্য আরও কিছু যুক্ত করতে পারে।

  • আপনার যদি কোনও পণ্যতে মাত্র কয়েকটি অ্যাট্রিবিউট মান পরিবর্তন করতে হয় এবং স্বয়ংক্রিয়ভাবে আপেক্ষিক সূচী তালিকাটি আপডেট করতে হয় তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন: Mage::getSingleton('catalog/product_action')->updateAttributes();

  • আপনি যদি তার পরিবর্তে রিসোর্টটি মডেলটি নিজের ব্যবহারের মাধ্যমে পরিচালনা করতে চান তবে: 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


আমি এখানে595973 এর মন্তব্যটি অনুলিপি করব, কারণ এটি মুছে ফেলা হবে। @ বিনাই আপনি কি বলছেন যে পণ্য সম্পর্কিত ডেটা পুনর্নির্মাণের সময় EE 1.13+ এর এই পারফরম্যান্সের সমস্যা নেই? আমরা কোথায় নিশ্চিত করতে পারি যে ইই সূচক স্বয়ংক্রিয়ভাবে পরিবর্তিত সত্তা এবং কেবলমাত্র সেগুলি প্রসেস করে?
ফ্যাবিয়ান ব্ল্যাচসমিড

EE 1.13 তে সূচক মাইএসকিউএল ট্রিগার ব্যবহার করে একটি ডিবি স্তরের যেকোন পরিবর্তন বাছাই করে এবং পরিবর্তন সারণীতে আপডেট হওয়া সত্তা আইডি রেকর্ড করে। এই চেঞ্জলগগুলি ক্রোনজবসের মাধ্যমে প্রক্রিয়া করা হয়।
বিনাই

2

আমি ধরে নিয়েছি আপনার অর্থ হ'ল অ্যাডমিন ui তে কোনও পণ্য সম্পাদনা করার পরে আপনি কোনও পণ্যটিকে পুনরায় তালিকাবদ্ধ করতে চান। সবচেয়ে সহজ পদ্ধতিটি কেবলমাত্র "সংরক্ষণের উপর আপডেট" এ সূচক মোড সেট করা। আপনি যে পণ্যগুলি ব্যবহার করছেন সে সম্পর্কিত সমস্ত সূচকগুলির জন্য আপনাকে এটি করতে হবে, সম্ভবত: পণ্যাদির বৈশিষ্ট্য, পণ্যের মূল্য, পণ্য ফ্ল্যাট ডেটা, বিভাগ পণ্য, স্টক স্থিতি।

এটি সম্ভবত পণ্য সঞ্চয় যদিও কমিয়ে দেবে।

বিকল্পভাবে সম্ভবত এই লিঙ্কটি সাহায্য করবে। স্টক আপডেট করার পাশাপাশি কীভাবে তারা আপডেট করবেন তা বর্ণনা করার সাথে সাথে মন্তব্যগুলি দেখুন। http://www.magentocommerce.com/answers/discussion/239/reindex-one-product-at-a-time/p1


2

নিশ্চিত করুন যে আপনি এটি ফ্রন্টএন্ড বা আপগ্রেড স্ক্রিপ্টগুলিতে করছেন না এবং বর্তমানে লোড স্টোরটি "অ্যাডমিন"। অন্যথায়, $ product-> সেভ () মোটেই কাজ করবে না। প্রথমে পরীক্ষা করে দেখুন যে কোনও পণ্য সংরক্ষণের প্রভাব রয়েছে।


2

@ ফেভারসোসিয়ালের উত্তরের পাশাপাশি এটিও নিশ্চিত করে নিন যে আপনার কাছে calling product-> সেভ ()- এ কল করার আগে পণ্যটিতে লোড করার জন্য প্রয়োজনীয় সমস্ত কিছু রয়েছে। অন্যথায় সংরক্ষণটি সেই পণ্য থেকে জিনিসগুলি সরিয়ে ফেলতে পারে যা আমি কঠিনভাবে অভিজ্ঞ হয়েছি।

এসকিউ ছাড়াই পণ্য সংরক্ষণের মতো যা পরে সমস্ত ইউআরএল পুনর্লিখনগুলি ভেঙে দেয় এবং পুরো সাইটটিকে এই পণ্য পৃষ্ঠাতে পুনঃনির্দেশ করে তোলে: এস: পি


ভাল কথা, এ কারণেই আমি মনে করি catolog/product_actionপদ্ধতির ব্যবহার করা ভাল, যাতে আপনি উপরের সমস্যাটি ঝুঁকি না করেন
ফ্রে

1

আমি এই তথ্যগুলি পুরো পরিস্থিতিটি আরও ভালভাবে বোঝার জন্য দরকারী হতে পারি।

  • আপনার যদি কেবল একটি গুনের মান পরিবর্তন করতে হয় এবং আপেক্ষিক সূচিপত্রটি স্বয়ংক্রিয়ভাবে আপডেট করতে হয় তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন: Mage::getSingleton('catalog/product_action')->updateAttributes();

  • আপনি যদি তার পরিবর্তে রিসোর্টটি মডেলটি নিজের ব্যবহারের মাধ্যমে পরিচালনা করতে চান তবে: 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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.