django oscar rebuild_index有错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django oscar rebuild_index有错误相关的知识,希望对你有一定的参考价值。

apps.search.search_indexes.py

class ProductIndex(search_indexes.ProductIndex):

    def index_queryset(self, using=None):
        return super(ProductIndex, self).index_queryset().exclude(categories=None)

    def read_queryset(self, using=None):
        return super(ProductIndex, self).read_queryset().exclude(categories=None)

    def prepare(self, obj):
        prepared_data = super(ProductIndex, self).prepare(obj)    
        attrs = defaultdict(set)

        attrs_from_obj = lambda obj: [attrs[attr.attribute.code].add(attr.value) for attr in obj.attr.get_values()]

        if obj.is_parent:
            for child in obj.children.all():
                attrs_from_obj(child)
        else:
            attrs_from_obj(obj)

        for attr, vals in attrs.items():
            prepared_data[attr] = list(vals)

        return prepared_data

./manage_py rebuild_indexes --noinput之后我有一个错误:

无法向Solr添加文档:Solr响应错误(HTTP 400):[原因:错误:[doc = catalogue.product.1451] unknown field'proizvoditel']

在仪表板中我有产品类型,其属性名为Producer,代码为proizvoditel

我更换了proizvoditel - > proizvoditel_s并且rebuild_index没问题,但搜索不起作用。

答案

如果您收到未知的字段错误,可能是由于您尝试引入的字段尚未在架构中注册。

您使用的是什么版本的Django-Oscar和Solr?我正在使用Oscar 1.5和Solr 4.7.2,因此您的设置可能会略有不同。

如果你在bash中运行以下(假设你正在关注奥斯卡文档)它应该解决你的字段​​问题:

$ python manage.py build_solr_schema > solr-4.7.2/example/solr/collection1/conf/schema.xml

如果您有自己的Solr设置,那么自己运行build_solr_scema并将文件复制到solr的conf目录中。

确保重新启动服务器。然后做:

$ python manage.py rebuild_index --noinput

看看是否有帮助。

以上是关于django oscar rebuild_index有错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Stripe 支付网关与 Django Oscar 集成?

使用 Django 自动设置 Apache Solr - AWS Elastic Beanstalk 上的 Oscar

Django-Oscar 将用户交替发送到“付款详细信息”和“预览”或“感谢”页面

如何创建 django-oscar 产品类作为数据迁移

如何验证 Django Oscar 中的帐单地址信息?

django oscar rebuild_index有错误