5

任意のアイデアや提案。私はちょっと混乱しています.solrとmagentoを数回セットアップしましたが、magento 1.12では奇妙な動作をし、適切な結果もスペルチェックもありません。

私たちのmagento 1.11はsolr 1.4で正常に動作していましたが、まだ正常に動作しています.1.4とsolr 3.6を使用しようとしていますが、修正はありません.

任意のアイデアや提案。私はちょっと混乱しています

4

2 に答える 2

6

Magento EE 1.12 の solr で複数の問題が見つかりました。

  1. cronjob を介してシェルからフルテキスト インデクサーを実行すると、次のイベント (はい、スペルが間違っています) "catelogsearch_searchable_attributes_load_after" はディスパッチされず、このメソッドは実行されません: storeSearchableAttributes. これにより、すべてのフルテキスト属性が Solr ドキュメントで送信されなくなりました。解決策は GUI から実行することですが、.htaccess で php タイムアウトを延長し、おそらく php メモリ制限も延長する必要があります。Web サイトの訪問者にこのような長いタイムアウトが必要ないことは明らかなので、おそらくどこかにハードコーディングするでしょう。

  2. Magento 管理 GUI で「部分コミット」を有効にすることをお勧めします。

  3. このインデクサーを実行しているときは、solr ログに注意してください。貴重なヒントを与えてくれます。solr で深刻なエラーを引き起こす 2 つの問題がありました。「*」が「\*」に誤ってエスケープされていたもの。!== "*": app/code/local/Enterprise/Search/Model/Adapter/Solr/Abstract.php をチェックするコアからローカル オーバーライドを作成してオーバーライドしました。

                 foreach ($facetFieldConditions as $facetCondition) {
                     if (is_array($facetCondition) && isset($facetCondition['from'])
                             && isset($facetCondition['to'])) {
                        $from = (isset($facetCondition['from']) && strlen(trim($facetCondition['from'])) && trim($facetCondition['from']) !== "*")
                             ? $this->_prepareQueryText($facetCondition['from'])
                             : '*';
                        $to = (isset($facetCondition['to']) && strlen(trim($facetCondition['to'])) && trim($facetCondition['to']) !== "*")
    
  4. また、複数選択に設定された属性にオプションが選択されていない場合もありました。簡単に言えば、配列が空の場合、空の文字列が追加され、エラーがスローされました。解決策は、最初に配列が空かどうかを確認することでした。したがって、app/code/local/Enterprise/Search/Model/Adapter/Abstract.php でオーバーライドする必要がありました。

    if (!empty($val)) { $preparedValue = array_merge($preparedValue, explode(',', $val)); }

于 2012-10-20T00:50:02.757 に答える
1

また、select/multi-select 属性を持つ製品が空白のラベルで solr に送信される問題も修正しました。これにより、インデクサーが完了できませんでした。

app/code/core/Enterprise/Search/Model/Adapter/Abstract.php をオーバーライドし、これを正しくオーバーライドするローカル モジュールを作成します。

これが修正です

--- a/app/code/core/Enterprise/Search/Model/Adapter/Abstract.php
+++ b/app/code/local/Enterprise/Search/Model/Adapter/Abstract.php
@@ -434,6 +434,10 @@ abstract class Enterprise_Search_Model_Adapter_Abstract
                     foreach ($preparedValue as $id => $val) {
                         $preparedValue[$id] = $attribute->getSource()->getOptionText($val);
                     }
+                    
+                    $preparedValue = array_filter($preparedValue);
+                    $preparedNavValue = array_filter($preparedNavValue);
+                    
                 } else {
                     $preparedValue = $value;
                     if ($backendType == 'datetime') {
于 2012-11-16T15:10:33.497 に答える