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没问题,但搜索不起作用。
答案 0 :(得分:0)
如果您收到未知字段错误,可能是因为您尝试引入尚未在架构中注册的字段。
您使用的是什么版本的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
看看是否有帮助。