我正在尝试使用Haystack,并希望设置一个搜索引擎:
在同一模型中,我希望能够在attribute a
中搜索attribute b
或进行搜索。
我的模型结构如下:
Datas : a
b
date
我在search_indexes.py
中尝试了以下代码:
class ADatasIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
a = indexes.CharField(model_attr='a')
date = indexes.DateTimeField(model_attr='date')
def get_model(self):
return Datas
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(date__lte=datetime.datetime.now())
class BDatasIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
b = indexes.CharField(model_attr='b')
date = indexes.DateTimeField(model_attr='date')
def get_model(self):
return Datas
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(date__lte=datetime.datetime.now())
但没有任何成功:
ImproperlyConfigured("Model '%s' has more than one 'SearchIndex`` hand
ling it. Please exclude either '%s' or '%s' using the 'HAYSTACK_EXCLUDED_INDEXES
' setting." % (model, self.indexes[model], index))
django.core.exceptions.ImproperlyConfigured: Model '<class 'mainsite.models.Datas'>' has more than one 'SearchIndex`` handling it. Please exclude either '<ma
insite.search_indexes.ADatasIndex object at 0x03176DF8>' or '<mains
ite.search_indexes.BDatasIndex object at 0x031AD8F0>' using the 'HAYSTACK
_EXCLUDED_INDEXES' setting.
答案 0 :(得分:0)
您获得的错误来自同一模型的两个SearchIndex类。
您只需要一个 SearchIndex,然后两个字段都会被放在数据模板上。
class DatasIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
a = indexes.CharField(model_attr='a')
b = indexes.CharField(model_attr='b')
date = indexes.DateTimeField(model_attr='date')
def get_model(self):
return Datas
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(date__lte=datetime.datetime.now())
然后,在模板目录中,创建一个文件:
搜索/索引/ MyApp的/ datas_text.txt
在该文件中:
{{ object.a }}
{{ object.b }}
以及您要搜索的任何其他字段。
干草堆文档是here:
答案 1 :(得分:0)
您可以使用此haystack issue中提到的代理模型。
class BDatas(Datas):
class Meta:
proxy = True
然后在BDatasIndex
def get_model(self):
return BDatas