我正在尝试使用Magento索引Solr中的自定义实体.
我遵循了这个指南:
http://www.summasolutions.net/blogposts/magento-apache-solr-integration-part-iii-indexing-custom-data,但我仍然无法使它工作.
在我的情况下,我有一个代表新闻的EAV实体,我希望默认的Magento搜索显示结果,包括这个实体.
与指南类似,我创建了“getSolrDocument”函数:
protected function getNewsSolrDocument($id, $name, $storeId, $visibility, $category, $title, $subtitle, $description) {
$document = new Apache_Solr_Document();
$document->addField("id", $id);
$document->addField("unique", $id);
$document->addField("news_name_en", $name);
$document->addField("news_category_en", $category);
$document->addField("news_title_en", $title);
$document->addField("news_subtitle_en", $subtitle);
$document->addField("news_description_en", $description);
return $document;
}
还有一个“addSolrDocument”:
protected function addSolrDocument(&$solrClient, $document) {
$solrClient->addDocument($document);
$solrClient->commit();
}
但$solrClient-> addDocument($document)会抛出异常:
“400”状态:[doc = 15]缺少必填字段:可见性
我注意到在Magento提供的Solr模式中有这一部分:
<!-- System required fields. -->
<field name="id" type="string" indexed="true" required="true" stored="true"/>
<field name="unique" type="string" indexed="true" required="true"/>
<field name="store_id" type="int" indexed="true" required="true"/>
<field name="in_stock" type="boolean" indexed="true" required="true"/>
<field name="visibility" type="int" indexed="true" required="true"/>
该部分定义哪些字段是强制性的,但对于我的新闻实体“in_stock”和“可见性”是无用的.
我正在使用Magento EE 1.14.0.1和Solr 3.6.2.
实现目标的正确方法是什么?
谢谢
最佳答案 在不了解您的场景的情况下,您可以简单地将以下行添加到您的函数体中:
$document->addField("visibility", $visibility);
显然,$visibility变量被传递,因此添加它并没有什么坏处.它可能会增加索引大小,但是整数不应该受到太大影响(此外,名称表明它只是某种标志).