这让我有点疯狂。我在运行SOLR的情况下运行Magento EE 1.11.1。我们有一个每晚运行的cron,它重新索引整个站点。每次执行此操作时,我都会检查SOLR配置, numDocs 和 maxDocs 值只是当前应编入索引的一小部分(27000对比~90000)。 这意味着当我在网站上进行搜索时,搜索结果只是它们的一小部分。
使搜索正常工作的唯一方法是停止SOLR,删除并重新创建/ apache-solr / site_name / solr / data文件夹,重新启动,并通过shell重新索引目录搜索索引。如果我试图通过shell 运行这个特定的reindex而不用删除并重新创建数据文件夹,那么我只能获得大约一半的文档(~51000)。
数据文件夹中的所有索引文件都归root所有,SOLR jar以root身份运行。我将所有日志设置为警告,但当前没有记录任何内容。我使用Solr管理其他站点并且从未遇到过这个问题 - 但是这个安装有许多属性(330)和许多产品(~100,000)。这可能是问题的一部分吗?谢谢!
答案 0 :(得分:3)
EE1.12可能也不是解决方案。我们在EE1.12上有一个客户端,它在SOLR集成方面遇到了问题。在他们的情况下,索引器访问自定义产品属性时,所有索引尝试都会失败。
Nexcess和Magento的支持已经为此工作超过6周,Magento支持的当前状态是 -
不幸的是,补丁仍在开发中,我无法就开发人员何时完成补丁提供建议。
答案 1 :(得分: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>
现在,您可以通过从Magento根文件夹发出以下命令从命令行重建Solr索引(假设您有shell访问权限):
php shell/indexer.php --reindex catalogsearch_fulltext
答案 2 :(得分: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
方法。这导致各种额外数据无法注册。
我能想到的唯一副作用是,现在shell 执行将加载所有管理员观察者。这可能会导致速度降低,从而破坏了从shell运行的部分目的。它不会像浏览器那么慢,但它可能比以前慢。
如果您有任何问题或认为我可能会以其他方式提供帮助,请告诉我们!
答案 3 :(得分:1)
在运行索引器时,您是否花了一些时间查看solr日志?我们目前正在运行1.12,甚至在那里发现了solr的几个问题。当solr通知我们一个错误时,我们不得不进行故障排除。
我的回答在我的回答中:Magento 1.12 and Solr 3.6 No proper results and no spell suggestions
我认为这个建议适用于1.11,但你可能需要稍微修改一下。 打开./app/code/core/Enterprise/Search/Model/Adapter/Abstract.php 并找到prepareDocsPerStore。
您可以监视并记录发送给solr的文档作为完整性检查。所以你可以在$ docs [] = $ doc下面做一些快速而又脏的事情。 像:
$ solr_log_file ='/ mnt / tmp /'。date('Y-m-d',time())。'/'。$ storeId。' - '。$ productctId.'-solr.txt'; file_put_contents($ solr_log_file,var_export($ doc,true)); 警告:我可能会遇到一些语法错误,因为我刚刚解决了这个问题。
在此行之前和之后执行$ productIndexData的var_export也证明是有启发性的: $ productIndexData = $ this-&gt; _prepareIndexProductData($ productIndexData,$ productId,$ storeId);
答案 4 :(得分: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,这对我有用。