0

私は Magento 1.7.0.2 を使用していますが、この問題に悩まされています。問題は、この用語を初めて検索したときに何も表示されないことです。ここで確認できます。これは、用語 gem を初めて検索したときのことです。

、同じ用語をもう一度検索すると、Magento は次のエラーを表示します

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-512' for key 'PRIMARY'

Trace:
#0 /home/stagerig/public_html/includes/src/Varien_Db_Statement_Pdo_Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/stagerig/public_html/includes/src/__default.php(63012): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 /home/stagerig/public_html/includes/src/__default.php(52694): Zend_Db_Statement->execute(Array)
#3 /home/stagerig/public_html/includes/src/__default.php(53730): Zend_Db_Adapter_Abstract->query('INSERT INTO srl...', Array)
#4 /home/stagerig/public_html/includes/src/__default.php(54566): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO srl...', Array)
#5 /home/stagerig/public_html/includes/src/MageCoders_DefaultSearch_Model_Mysql4_Fulltext.php(27): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO srl...')
#6 /home/stagerig/public_html/includes/src/Mage_CatalogSearch_Model_Fulltext.php(136): MageCoders_DefaultSearch_Model_Mysql4_Fulltext->prepareResult(Object(Mage_CatalogSearch_Model_Fulltext), 'gem', Object(Mage_CatalogSearch_Model_Query))
#7 /home/stagerig/public_html/includes/src/Mage_CatalogSearch_Model_Resource_Fulltext_Collection.php(55): Mage_CatalogSearch_Model_Fulltext->prepareResult()
#8 /home/stagerig/public_html/includes/src/Mage_CatalogSearch_Model_Layer.php(58): Mage_CatalogSearch_Model_Resource_Fulltext_Collection->addSearchFilter('gem')
#9 /home/stagerig/public_html/includes/src/Mage_CatalogSearch_Model_Layer.php(42): Mage_CatalogSearch_Model_Layer->prepareProductCollection(Object(Mage_CatalogSearch_Model_Resource_Fulltext_Collection))

これらは最初の数行のみであり、完全ではありません。他のすべてのエラーは本質的に同じであり、ファイルに問題があることを示しています...

問題を調査したところ、

  1. catalogsearch_resultMagento データベースのテーブルには PRIMARY という名前のインデックスがあり、このテーブルが原因でエラーが発生します
  2. catalogsearch_query テーブルは検索語を記録します
  3. 1062 Duplicate entry '1-512' for key 'PRIMARYの'1 は検索クエリ用語 ID とデータベース、512 は gem クエリ作業に関連する製品 ID です。
  4. レコードが既に存在するため、catalogusearch_resultテーブルがクエリ文字列に対して再度更新しようとすると、このエラーが発生すると思うので、このエラーがポップアップします...

これまでのところ完了.. 5. データベース内のすべてのログ テーブルを空にしました

  1. catalogsearch_results および catalogsearch_query テーブルを空にしましたが、このエラーが再び表示されます

  2. 正しいmagentoバージョンをダウンロードし、完全なcatalagsearchフォルダーも置き換えましたが、無駄ではありません..

  3. 私はre-indexing、magentoキャッシュを完全にクリアしようとしました(バックエンド管理者と手動でvarフォルダーを削除することの両方を介して)

  4. モジュールを無効にしCATALOGSEARCHてから再度有効にしてみてください...

  5. MagentoフォーラムとGoogle検索から助けを得ようとしましたが、何も役に立ちませんでした...

私が持っていたすべてのオプションを試してみた、または私が知ったようになった、私は過去4日間頭を打っていますが、すべて無駄です...

誰か助けてください、ありがとう

アランのために

class MageCoders_DefaultSearch_Model_Mysql4_Fulltext extends Mage_CatalogSearch_Model_Mysql4_Fulltext{

    public function prepareResult($object, $queryText, $query)
    {   
         $adapter = $this->_getWriteAdapter();

         if ($query->getIsProcessed()) { return $this; }
         $mainTable = $this->getTable('catalogsearch/result');
         $queryText = mysql_escape_string(trim($queryText));    
         $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$queryText);   
         if($product){
            $sql = "INSERT INTO {$mainTable} SET query_id = '".$query->getId()."',
                                                 product_id = '".$product->getId()."',
                                                 relevance = '2'";
            $adapter->query($sql);                                   
         }else{
            $name = '%'.$queryText.'%';
            $collection = Mage::getResourceModel('catalog/product_collection')
                                ->addAttributeToFilter('name',array('like'=>$name));

            if($collection->count()){   
                foreach($collection as $item){
                        $sql = "INSERT INTO {$mainTable} SET query_id = '".$query->getId()."',
                                                             product_id = '".$item->getId()."',
                                                             relevance = '1'";
                        $adapter->query($sql);                                   
                }
            }                   
         }

    }  

これはあなたが言及しているファイル内のコードです。

私には、データが正しく渡され、論理エラーまたはそのようなものがあり、それについてはよくわかりません

あなたが私をもう少し案内できるかどうか見てください..

ありがとう..

4

2 に答える 2

3

ショート バージョン: モジュールの使用を停止しMageCoders_DefaultSearchます。このモジュールは、

  1. お使いの Magento バージョンと互換性がありません

  2. インストールした他の拡張機能と互換性がありません

  3. システムに誤って挿入された一部のデータと互換性がありません。

長いバージョン:

バックトレース、特にこの行を見てください

#5 /home/stagerig/public_html/includes/src/MageCoders_DefaultSearch_Model_Mysql4_Fulltext.php(27): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO srl...')

MageCoders_DefaultSearch_Model_Mysql4_Fulltextこのエラーは、リソース モデルの方法に起因します。具体的には、データベース リレーションシップ ルールと互換性のない方法でシステムにデータを追加しようとしています。これはデフォルトの Magento リソース モデルではありません。モジュールがメソッドMageCoders_DefaultSearchを書き直したprepareResultようです。このメソッドのコードを調べて、論理エラーがこのコードにあるかどうか、このコードが他の場所から無効な情報を受け取っているかどうかを判断する必要があります。

更新: (また、この拡張機能は Magento 1.7 ではサポートされていないようです)。

于 2012-10-12T20:16:38.833 に答える
1

@newbeeこの拡張機能をアンインストールすることを提案した場合、それを作成しますか?コードは、元のMagentoファイルに実装されているものとほとんど同じです。アプローチだけはあまり良くありません。このコードは、query_id、product_id、およびrelevanceをcatalogsearch_resultsテーブルに挿入します。問題は、このクエリがすべての検索クエリに対して実行され、結果として少なくとも1つの製品が含まれることです。

query_id-product_idのペアは一意である必要があります。ただし、拡張機能は、顧客が検索クエリを送信するたびに新しい行を追加しようとします。

標準のmagentoフルテキストリソースは重複をチェックし、「ONDUPLICATEKEYUPDATE」命令で挿入を行います。したがって、クエリの重複は回避されます。

于 2012-10-12T21:30:56.300 に答える