避免在産品屬性值保存時無效産品平闆錶reindexing -- magento-1.7 領域 和 attributes 領域 和 indexing 領域 magento 相關 的問題

Avoid invalidating product flat table reindexing upon product attribute value save


简体版 || 繁體版
1
vote

問題

中文

magento 1.7。

我注意到,當您更新清單數量時,不需要對Catalog_Product_Flat的reindex。

這很有用,因為我可以設置一個Cron作業,每天晚上淩晨3點更新庫存。導入20,000項的數據隻需一分鍾即可。如果需要reindex,它將至少添加10分鍾。

現在,我想還顯示估計抵達時間的售貨量。我可以與庫存數量同時導入數據。但是如果我為該日期創建常規屬性,那麼每次導入時,索引都將無效。這不是正確嗎?

是否有任何方法我可以創建一種屬性,如股票數量,即一個不需要任何reindexing?我知道在1.7中有一個庫存狀態指數,但似乎隻是通過更改庫存數量(我們使用Manage Stock = No)無效。

我認為是一個黑客,我可以使用"news_from_date" (無論如何,我們不使用)來保存該日期。

更新 我改變瞭問題標題,更好地反映瞭我的問題。

從根本上說,我想避免 catalog_product_flat_1 錶reindex。為什麼?因為它丟棄瞭錶並重建它,而且雖然正是正是正常的。憑藉70,000多項來馴鹿(更新),停機時間至少為5分鍾。

為瞭避免reindexing,我建議創建一個像庫存數量一樣的屬性,但也許這太難瞭。

保存每個産品並更新其索引條目如何?我認為通過更新查詢,Catalog_Prodct_Flat_1錶將繼續工作,前端將繼續工作。是正確的假設嗎?

個人保存方法更新索引,或者它們使其使其無效?

隻要Magento隻是嚮平台索引發送更新查詢,我認為前端將保持運行。一個完整的reindex會使前端不可用作一段時間。

英文原版

Magento 1.7.

I noticed that when you update inventory quantities, a reindex of catalog_product_flat is not required.

That's useful, because I can set up a cron job to update inventory every night at 3 am. Importing the data for 20,000 items only takes about a minute. If reindex was required, it would add at least another 10 minutes.

Now, I want to also show Estimated Time of Arrival dates for out of stock items. I can import the data at the same time as the stock quantities. But if I create a regular attribute for that date, then every time I import, the index will be invalidated. Isn't that correct?

Is there any way I can create an attribute that works like stock quantity does, i.e. one that doesn't require any reindexing? I know there is a stock status index in 1.7, but it does not seem to get invalidated by just changing stock quantities (we use Manage Stock = No).

I was thinking that as a hack, I could use the "news_from_date" (which we don't use anyway) to hold that date.

UPDATE I changed the question Title to better reflect what my problem really is.

Fundamentally, I want to avoid the catalog_product_flat_1 table reindex. Why? Because it drops the table and rebuilds it, and while that is happening the frontend is non-functional. With 70,000+ items to reindex (and more coming), the downtime is at least 5 minutes.

To avoid reindexing, I suggested creating an attribute that works like stock qty, but perhaps that is too hard to do.

What about saving each product and updating its index entry? I think that with UPDATE queries, the catalog_prodct_flat_1 table would continue working, and the frontend would continue working. Is that a correct assumption?

Do individual product saving methods update the index, or do they invalidate it?

As long as Magento is only sending update queries to the flat table index, I think the frontend would remain operational. A complete reindex renders the frontend unusable for some time.

        

回答列表

1
 
vote

如果隻想在不運行索引器的情況下更新單個産品屬性,請使用以下方法。可以通過這種方式更新每秒幾百個産品。

首先,添加新産品屬性 estimated_time_of_arrival
在您的更新腳本中:

  $product->addAttributeUpdate(     'estimated_time_of_arrival',     $date,     $storeId // numeric store id value, e.g. Mage::app()->getStore()->getId() );   

如果它是一個全局scope屬性, $storeId 甚至都不重要。
如果您不關心商店ID範圍,您也可以使用:

  $product->setData('estimated_time_of_arrival', $date)     ->getResource()     ->saveAttribute($product, 'estimated_time_of_arrival');   

兩種方法是等效的(後者將使用 $product->getStoreId() 如果該屬性具有網站或商店視圖範圍)。

當然,如果在某種方式使用該屬性需要索引,則您將在更新後reindex。

 

If you only want to update a single product attribute without running the indexer, use the following method. It will be possible to update a couple of hundred products per second that way.

First, add a new product attribute estimated_time_of_arrival.
The, in your update script:

$product->addAttributeUpdate(     'estimated_time_of_arrival',     $date,     $storeId // numeric store id value, e.g. Mage::app()->getStore()->getId() ); 

If it's a global scope attribute, the $storeId doesn't even matter.
If you don't care about the store ID scope, you can also use:

$product->setData('estimated_time_of_arrival', $date)     ->getResource()     ->saveAttribute($product, 'estimated_time_of_arrival'); 

Both methods are equivalent (the latter will use $product->getStoreId()if the attribute has a website or store view scope).

Of course, if you use that attribute in some way that requires indexing, you will have to reindex after the updates.

 
 
 
 
1
 
vote
股票庫存庫存數據被保存到另一個 cataloginventory_stock_item 錶而不是産品eav屬性,而不是必需的産品平麵數據索引。但它觸發瞭<強大>股票狀態分度。因為您需要簡單的方法是使用標準産品屬性。但它需要産品平麵數據索引在前端和商店使用平麵目錄産品錶(請參閱 admin-&gt; system-&gt; catalog 設置)。
第二個選項使用另一個錶來存儲您的屬性,但您應該在顯示産品時使用其他查詢加載這些屬性。這是不正確的方法。
您可以在保存産品時關閉自動索引,並在更新商店産品後,您可以自動完成所有索引。查看邏輯:
   $files = glob("/tmp/zend_cache*"); foreach($files as $f) {         unlink($f); } 0  

更新

您可以使用此方法更新無索引的屬性:

   $files = glob("/tmp/zend_cache*"); foreach($files as $f) {         unlink($f); } 1  
 

Stock inventory data is saved to another cataloginventory_stock_item table rather than product eav attributes and no required Product Flat Data indexation. But it triggers Stock Status indexation. For you needs easy way is using standard product attributes. But it requires Product Flat Data index when you want display these attributes on frontend and your store uses Flat Catalog Product table (see admin->system->config->catalog settings).
Second option is using another table to store your attributes, but you should load these attributes with additional query while displaying products. It is not right approach.
You can switch off auto indexation while saving products and after update your store products you can do all index automatically. See logic:

//switch index mode to manual $pCollection = Mage::getSingleton('index/indexer')             ->getProcessesCollection(); foreach ($pCollection as $process) {    $process->setMode(Mage_Index_Model_Process::MODE_MANUAL)->save(); }  //here your product updating logic foreach($products as $product){     $product->setSomeValue('some value')->setAnotherValue($anotherValue);     try{        $product->save();     }catch(Exception $e){        Mage::logException($e);     } } //product updating ends here  //switch index mode to real time and reindex foreach ($pCollection as $process) {     $process->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)->save();     try{        $process->reindexEverything();     }catch(Exception $e){        Mage::logException($e);     } } 

Updated

You can use this method for updating attributes without indexation:

$productIds = array($product->getId()); // you can add several product ids to this array if their attribute-value pairs are same. $attributes = array('estimated_time_of_arrival' => $someValue);// you can add several attribute-value pair to this array. $storeId    = Mage::app()->getStore()->getId(); Mage::getSingleton('catalog/product_action')->updateAttributes($productIds, $attributes, $storeId); 
 
 
 
 
0
 
vote

當我使用cron更新産品屬性值時,我麵臨著一些類似的問題。這些産品在分類上市的前端顯示"缺貨" 。但它顯示在後端的庫存。

我發現這個問題是$ _product-&gt; getsalable()始終返迴 false 。 我們如何解決這些問題?

 

I am facing somewhat similar issue, When i update product attribute value using cron. Those products shows "Out of stock" in front-end at category listing. But it shows in-stock in back-end.

I found the issue is with $_product->getSaleable() always return false. How can we resolve such issue?

 
 
 
 

相关問題

9  父類彆在子類彆中顯示産品,即使産品未分配給父類彆  ( Parent category is showing products in subcategories even though product was no ) 
讓我們假設我有一個類彆,衣服和這個類彆有一個子類彆的T恤。 現在我將産品添加到T恤類彆(通過選中添加産品屏幕中的框),但我不檢查服裝類彆。所以,我認為這意味著該産品隻會齣現在前端的T恤類彆中,而不是在父類彆服裝中。 但是,産品齣現在服裝和T恤類彆中。 這是一個問題,因為T恤類彆是"包括導航菜單中" &gt;沒有類彆,...

2  類彆URL重寫損壞  ( Category url rewrites corrupted ) 
我在Enterprise_URL_REWRITE中被損壞的URL,如下所示: category/subcategory.html-274 注意,數字在後綴之後。當我重新輸入url_redirect過程時,數字遞增到275。 任何身體都有任何想法? ...

2  Google索引HTTPS用於主頁 - 解決方案?  ( Google indexing https for homepage solutions ) 
似乎榖歌已經開始索引我網站的主頁的安全網址 - 這導緻瞭CSS和JS鏈接打破瞭la https - 布局破碎,但我不確定如何解決它,因為該綫程中的答案沒有解釋需要改變的內容,而且我甚至不會知道在哪裏以Google 開頭 是否有人知道一個解決方案,可以停止榖歌索引安全的主頁,或者該做什麼,以允許CSS和JS文件具有...

3  産品保存的reidex [復製]  ( Reindex required on product save ) 
這個問題已經在這裏有答案: magento企業:産品不重新顯示産品保存 (2個答案) ...

10  Reindex單産品  ( Reindex single product ) 
我想在更新後reindex單一産品。 現在我使用: $product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'foobar'); // edit something $product->save(); $stockItem = M...

1  magento 2:遷移後,客戶reindex不起作用  ( Magento 2 after migration customer reindex is not working ) 
這是我從終端索引上索引的問題。 column 'created_in' used in key specification without a key length, query was: CREATE TABLE IF NOT EXISTS `customer_grid_flat` 請幫助我解決這個...

0  找不到基錶或視圖:1146錶'cpaneluser_magento.catalog_category_flat'不存在'  ( Base table or view not found 1146 table cpaneluser magento catalog category fl ) 
在嘗試reindex catalog_category_flat(類彆平麵數據)時我正在遇到以下錯誤。我確實嘗試使用phpmyadmin和magento數據庫修復工具修復數據庫,但仍未修復。你可以調查錯誤,讓我知道是否有其他方法來解決問題? Stack trace: #0 /home/cpaneluser/pub...

1  Reindex價格問題(價值清單與列列錶不匹配)  ( Reindex price issue value list does not match column list ) 
有人使用瞭Innoext_advance pricing模塊嗎? 升級到magento 1.7 reindex崩潰或插入無效數據。 崩潰堆棧跟蹤: Exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[21S01]: Insert value...

1  替代索引解決方案,是否有任何建議?  ( Alternative indexing solution is there any suggestions ) 
原來的魔法索引恰好是如此慢,在我的情況下我有數百萬的skus需要被索引,轉換為平台桌和amp; URL重寫。 我不是在談論搜索索引。 原始洋光盤索引需要多天&amp;然後它停止 在代碼中挖掘後,我看到瞭它非常復雜的任務,通常它刪除所有 99887661 錶,導緻網站脫機 有關自定義索引器的任何建議,更快的索引器??...

1  在我的男人類彆中,其他類彆産品顯示我隻分配6個産品,但我不知道為什麼40個産品顯示  ( In my mens category other category product is showing i only assign 6 products ) 
在我的男人類彆中,其他類彆産品顯示我隻分配6個産品,但我不知道為什麼40個産品在這裏顯示,請幫助我。 我隻將6個産品分配給我從菜單和産品功能檢查的此類彆,但我沒有找到任何解決方案。 讓我們假設我有一個類彆,衣服和這個類彆有一個子類彆的T恤。 現在我將産品添加到T恤類彆(通過選中添加産品屏幕中的框),但我不檢查服裝類彆...

1  産品偶爾會消失  ( Products occasionally disappear ) 
客戶已經提到瞭一個不可能重新産生的錯誤,因此隻留下基於理論的解決方案。 我以為我會檢查其他人是否偶然發現瞭這個問題並使用瞭指導或解決方案。 網站大綱 我們的客戶已有 60,000 +産品 超過40個網站(在單一的Magento構建中) 當它們運行重新索引時,需要最多需要4個小時(是的,我們的導入腳本禁用重新...

2  重新計算産品的價格(應用“目錄價格規則”)  ( Recalculating a products price applying catalog price rules ) 
我有一個模塊,可直接在數據庫中更改産品的價格。我想要 catalog price rules ,我們網站上的各種摺扣,在我更新基本價格後應用於産品的價格。 保存項目,無論是在管理區域還是 ->save() 呼叫設置價格,但它需要太長時間纔能保存我們所需要的所有項目。我想重新計算摺扣價格而不做彆的。 我已經嘗試瞭各種"...

2  在衝突的URL路徑衝突的情況下,有哪些規則管理哪個實體“贏”  ( What are the rules that govern which entity wins in the case of conflicting ur ) 
如果多個實體(例如類彆,産品,CMS頁麵和模塊FrontName)所有嘗試使用相同的SEF URL,那麼Magento用於決定哪些算法或進程將保存在中core_url_rewrite 具有所需的 request_path ,它將附加的後綴解析衝突(例如'sale-123.html')。 提齣問題另一種方式,如果一個C...

1  什麼會導緻目錄重寫索引器需要在完成後立即刷新?  ( What would cause catalog rewrites indexer to need refreshed immediately after it ) 
在重新篩選目錄URL重寫之後,Magento錶示我們需要再次糾正它們。我正在使用命令行以將indexer.php作為後台任務運行: nohup php indexer.php --reindex catalog_url > /home/ubuntu/rewrites_index_20130218 2> /home...

0  8000+客戶群體破壞網站  ( 8000 customer groups breaking site ) 
我知道上傳這個很多客戶組會減慢reindexing,而且我正在索引緩慢,但現在加載我的客戶標簽差不多2分鍾。 它也殺死瞭整個地方的過程,隨機崩潰瞭網站。 我需要這個以實現每位客戶的價格,因為存在的插件不適用於我需要的東西。 有什麼我可以做的嗎?嚮索引者提供更多帶寬以某種方式? 感謝 ...

2  關閉禁用産品的URL重寫索引  ( Turn off url rewrite indexing for disabled products ) 
如何關閉在Magento 1.9中的禁用産品索引的目錄URL索引? ...

1  var /鎖總是空的  ( Var locks is always empty ) 
我在Magento安裝中看到瞭Var / Locks文件夾。但它始終是空的 - 即使是索引器正在運行。 我假設如果索引器觸發多次觸發,則會導緻問題,這是正確的嗎? 但我無法追蹤為什麼它總是留空。 Var / Locks設置為777 [Drwxrwxrwx] var /鎖將由var / logs的同一用戶擁有(...

3  Magento 1.9.3.2搜索返迴空結果  ( Magento 1 9 3 2 search returns empty result ) 
升級後,Magento搜索不起作用。 我嘗試過這個 https://magento.stackexchange.com//67952 選擇 e 。*, search_result 。 relevance , price_index 。 price , price_index 。 tax_class_id , ...

3  以編程方式鎖定索引器  ( Locking indexer programmatically ) 
我嘗試使用此代碼鎖定我的索引器,因為我曾經做過: <?php $_items = $_order->getItemsCollection(); ?> <?php $_index = 0; ?> <?php $_count = $_items->count(); ?> <?php $_giftMessage = '...

5  目錄索引需要3到4天  ( Catalog indexing take 3 to 4 days ) 
我對CLI的手動索引有關的問題,我的命令 php indexer.php reindexall將需要3到4天來強製索引。 這裏是當前目錄的一些狀態。 商店數量4 類彆300 + 産品數量40000 + 每個産品的屬性數200 + page11>(創建平麵圖約300+列) 我正在使用Mamgi工具導入...

2  Magmi似乎沒有更新價格指數? [關閉]  ( Magmi doesnt seem to update the price index ) 
關閉。這個問題是 off-topic 。它目前不接受答案。 想要改進這個問題?更新問題,所以它是對於magento堆棧交換。 關閉 5年前。 ...

1  為什麼産品不會被索引?  ( Why would product not be indexed ) 
我有一個可配置的産品,可在目錄中啓用,可見,搜索。它有一個兒童産品,也能夠擁有和庫存。但前端不可見産品。 我發現這是因為它不在平闆上。不是它在任何索引錶中齣現。什麼可能導緻它是如此由magento忽略的産品? ...

47  價格重新指數在結賬時導緻DB死鎖  ( Price re index causes db deadlocks during checkout ) 
我遇到瞭一個問題,在那裏我認為産品價格重新索引過程導緻結賬過程中的死鎖例外。 我在結賬過程中抓住瞭這個例外: 訂單轉換異常:sqlstate [40001]:序列化失敗:嘗試鎖定時發現1213個死鎖;嘗試重新啓動事務 不幸的是,由於捕獲瞭異常的位置,我沒有完整的堆棧跟蹤,但檢查InnoDB狀態我能夠追蹤死鎖: ...

3  Enterprise 1.14.0.1 - 搜索索引標記處理時不實際處理  ( Enterprise 1 14 0 1 search index marked processing when not really processing ) 
這已經開始發生在Enterprise 1.14.0.1的幾次上,我想知道有人是否經曆過同樣的問題。我注意到"目錄搜索索引" 在admin中列為"處理" 。我做瞭在"var /鎖" 中刪除任何雜散鎖定文件的通常步驟,它仍然存在。 如果我看 index_process 我可以看到"catalogsearch_fullte...

1  避免在産品屬性值保存時無效産品平闆錶reindexing  ( Avoid invalidating product flat table reindexing upon product attribute value sa ) 
magento 1.7。 我注意到,當您更新清單數量時,不需要對Catalog_Product_Flat的reindex。 這很有用,因為我可以設置一個Cron作業,每天晚上淩晨3點更新庫存。導入20,000項的數據隻需一分鍾即可。如果需要reindex,它將至少添加10分鍾。 現在,我想還顯示估計抵達時間的售貨量...




© 2022 it.wenda123.org All Rights Reserved. 問答之家 版权所有