如何使用 django-haystack 具有自定义属性的搜索构面?
How can I use django-haystack search facets with custom attributes?
我有一个 Django-oscar 商店,我成功安装了 Solr 4.7.2 作为搜索引擎。它适用于预定义的属性,例如upc, 标题, product_class...
但过滤附加属性不起作用。
那是我的 catalogue/models.py:
class Product(AbstractProduct):
video_url = models.URLField()
co2 = models.IntegerField()
is_public = models.BooleanField()
test = models.TextField()
在 search_indexes.py 中,我尝试添加如下内容:
co2 = indexes.IntegerField(model_attr="co2", null=True, indexed=False)
def prepare_co2(self, obj):
return self.apps.get_model().objects.filter(co2="2")
# return obj.co2 etc. here I tried a lot of code, but didnt work
我也试着复制了这个函数的 ready-made 代码。
有人知道怎么做吗?当我过滤 catalogue.products.title 时,它工作正常但不适用于 cataolgue.products.co2(我已经补充了自己)。
您不能从 prepare 函数中过滤对象,您只需要指定 haystack 如何访问对象字段。
from haystack import indexes
import oscar.apps.search.search_indexes as oscar_search_indexes
class ProductIndex(oscar_search_indexes.ProductIndex):
co2 = indexes.IntegerField(null=False, indexed=True)
def prepare_co2(self, obj):
return obj.co2
以上应该有效(一旦您在更新 Solr schema.xml 后重新索引您的产品),如果没有,请使用您遇到的错误或使用示例数据的意外查询行为更新您的问题。
我的 django-oscar 版本有问题。我更新了它,现在我可以成功地重新索引 schema.xml.
我有一个 Django-oscar 商店,我成功安装了 Solr 4.7.2 作为搜索引擎。它适用于预定义的属性,例如upc, 标题, product_class...
但过滤附加属性不起作用。
那是我的 catalogue/models.py:
class Product(AbstractProduct):
video_url = models.URLField()
co2 = models.IntegerField()
is_public = models.BooleanField()
test = models.TextField()
在 search_indexes.py 中,我尝试添加如下内容:
co2 = indexes.IntegerField(model_attr="co2", null=True, indexed=False)
def prepare_co2(self, obj):
return self.apps.get_model().objects.filter(co2="2")
# return obj.co2 etc. here I tried a lot of code, but didnt work
我也试着复制了这个函数的 ready-made 代码。
有人知道怎么做吗?当我过滤 catalogue.products.title 时,它工作正常但不适用于 cataolgue.products.co2(我已经补充了自己)。
您不能从 prepare 函数中过滤对象,您只需要指定 haystack 如何访问对象字段。
from haystack import indexes
import oscar.apps.search.search_indexes as oscar_search_indexes
class ProductIndex(oscar_search_indexes.ProductIndex):
co2 = indexes.IntegerField(null=False, indexed=True)
def prepare_co2(self, obj):
return obj.co2
以上应该有效(一旦您在更新 Solr schema.xml 后重新索引您的产品),如果没有,请使用您遇到的错误或使用示例数据的意外查询行为更新您的问题。
我的 django-oscar 版本有问题。我更新了它,现在我可以成功地重新索引 schema.xml.