6

これは私を少し夢中にさせています。SOLRを実行してMagento EE 1.11.1を実行しています。毎晩実行され、サイト全体のインデックスを再作成する cron があります。これを行うたびに、SOLR 構成を確認します。numDocsmaxDocsの値は、現在インデックスを作成する必要があるもののほんの一部です (27000 対 ~90000)。これは、サイトで検索を行ったときに、結果が本来あるべきもののほんの一部にすぎないことを意味します.

検索を適切に機能させる唯一の方法は、SOLR を停止し、/apache-solr/site_name/solr/data フォルダーを削除して再作成し、再起動して、シェル経由でカタログ検索インデックスだけを再インデックス化することです。データ フォルダーを削除して再作成せずにシェル経由でこの特定の再インデックスを実行しようとすると、取得する必要があるドキュメントの約半分 (~51000) しか取得できません。

データ フォルダー内のすべてのインデックス ファイルはルートによって所有され、SOLR jar はルートとして実行されます。すべてのログを警告に設定していますが、現在何も記録されていません。Solr を使用して他のサイトを管理していますが、この問題は発生していません。ただし、このインストールには多くの属性 (330) と多くの製品 (~100,000) があります。それは問題の一部でしょうか?ありがとう!

4

5 に答える 5

3

EE1.12も解決策ではないかもしれません。SOLR 統合に問題がある EE1.12 のクライアントがあります。この場合、インデクサーがカスタム製品属性にアクセスすると、インデックス作成のすべての試みが失敗します。

Nexcess と Magento のサポートは、これに 6 週間以上取り組んできました。Magento のサポートからの現在のステータスは次のとおりです。

残念ながら、パッチはまだ開発中であり、開発者がいつそれを完了するかについてアドバイスすることはできません.

于 2012-10-04T14:30:23.373 に答える
3

Enterprise_Search モジュールは、デフォルトで毎日午前 3 時に実行される cronjob を追加するので、コード行をファイルに追加するよりも優れた解決策を見つけましたshell/abstract.php

admin の代わりにグローバル名前空間に特定のイベントを追加する小さなモジュールを作成するだけです。

<?xml version="1.0"?>
<config>
    <modules>
        <YourNamespace_YourModuleName>
             <version>0.0.1</version>
        </YourNamespace_YourModuleName>
    </modules>
    <global>
        <events>
            <!-- The misspelling (cat-e-logsearch) is correct, you can look it up in the config.xml of the Enterprise_Search module -->
            <catelogsearch_searchable_attributes_load_after>
                <observers>
                    <enterprise_search>
                        <class>enterprise_search/observer</class>
                        <method>storeSearchableAttributes</method>
                    </enterprise_search>
                </observers>
            </catelogsearch_searchable_attributes_load_after>
        </events>
    </global>
</config>

次の場所に別の構成ファイルを配置して、モジュールをアクティブ化することを忘れないでくださいapp/etc/modules/YourNamespace_YourModuleName.xml

<?xml version="1.0"?>
<config>
    <modules>
        <YourNamespace_YourModuleName>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Enterprise_Search/>
            </depends>
        </YourNamespace_YourModuleName>
    </modules>
</config>

これで、コマンド ラインから Solr インデックスを再構築できます。これには、Magento ルート フォルダーから次のコマンドを発行します (もちろん、シェル アクセス権があることが前提です)。

php shell/indexer.php --reindex catalogsearch_fulltext
于 2013-03-15T09:21:58.910 に答える
2

これに対する解決策を数日間確認した後(偶然にもこの質問にぶつかりました)、解決策があると思います。テストしましたが、バグは見られませんでした。

# shell/abstract.php @ line 75
public function __construct()
{
    if ($this->_includeMage) {
        require_once $this->_getRootPath() . 'app' . DIRECTORY_SEPARATOR . 'Mage.php';
        Mage::app($this->_appCode, $this->_appType);
        Mage::app()->addEventArea('adminhtml');# the magic line
    }

    $this->_applyPhpVariables();
    $this->_parseArgs();
    $this->_construct();
    $this->_validate();
    $this->_showHelp();
}

問題は、メソッドenterprise_search/observerを起動できるようにロードされていなかったことです。storeSearchableAttributesこれにより、さまざまな余分なデータが登録に失敗します。

私が考えることができる唯一の副作用は、シェルの実行がすべての admin オブザーバーをロードすることです。これにより速度が低下し、シェルから実行する目的の一部が無効になる可能性があります。ブラウザほど遅くはありませんが、おそらく以前より遅くなるでしょう。

ご不明な点がある場合、または別の方法でお役に立てるかもしれないと思われる場合は、お知らせください。

于 2013-01-21T08:17:40.230 に答える
1

インデクサーを実行しているときに、Solrログを確認するのに時間を費やしましたか?現在1.12を実行しており、そこでもsolrにいくつかの問題が見つかりました。solrがバグを通知するタイミングをトラブルシューティングする必要がありました。

私のコメントはここにあります:Magento1.12とSolr3.6適切な結果もスペルの提案もありません

このアドバイスは1.11にも当てはまると思いますが、少し変更する必要があるかもしれません。./app/code/core/Enterprise/Search/Model/Adapter/Abstract.phpを開き、prepareDocsPerStoreを見つけます。

健全性チェックとしてsolrに送信されているドキュメントを監視およびログに記録できます。したがって、たとえば、$ docs [] =$doc;の下ですばやく汚いことを行うことができます。お気に入り:

$ solr_log_file ='/mnt/tmp/'.date('Ymd',time()).'/'.$storeId.'-'.$productId .'- solr.txt'; file_put_contents($ solr_log_file、var_export($ doc、true)); 警告:これを打ち出したばかりなので、構文エラーが発生する可能性があります。

この行の前後で$productIndexDataのvar_exportを実行すると、次のようになります。$ productIndexData = $ this-> _ prepareIndexProductData($ productIndexData、$ productId、$ storeId);

于 2012-10-20T01:05:35.870 に答える
0

こんにちは、私の場合、この問題の別の解決策を見つけました。次のコードで小さなスクリプトを作成しました

ini_set("memory_limit","1000M");
require_once "app/Mage.php";
umask(0);
Mage::app();
$observer = Mage::getModel('enterprise_search/observer');
$observer->storeSearchableAttributes();

solrindex.php という名前で、これを mydomain/solrindex.php のようなブラウザで実行してから、admin から catalogsearch のインデックスを再作成すると、これでうまくいきます。

于 2013-03-20T09:55:15.917 に答える