php – 使用Solr索引Magento中的自定义实体

我正在尝试使用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变量被传递,因此添加它并没有什么坏处.它可能会增加索引大小,但是整数不应该受到太大影响(此外,名称表明它只是某种标志).

点赞