我在一个应用程序中使用Haystack并且它非常完美。它正在索引我需要的一切。但是,现在我创建了另一个应用程序,具有不同的模型和内容,我想Haystack索引它。我的想法是在我的网站上创建两个不同的“搜索”链接,每个应用程序一个。
然而,当我将第二个配置添加到haystack索引时,我遇到了一些问题......
我使用以下内容创建了一个新的search_index.py(在我的新应用内):
import datetime
from haystack.indexes import *
from haystack import site
from oportunity.models import Oportunity
class OportunityIndex(SearchIndex):
title = CharField(document=True, use_template=True)
body = CharField()
date= DateTimeField()
def index_queryset(self):
return Oportunity.objects.filter(date=datetime.datetime.now())
site.register(Oportunity, OportunityIndex)
但是,当我运行python manage.py rebuild_index时 我收到以下错误:
第94行,在all_searchfields中 提出SearchFieldError(“所有带有'document = True'的SearchIndex字段必须使用相同的字段名。”) haystack.exceptions.SearchFieldError:所有SearchIndex字段 'document = True'必须使用相同的字段名。
答案 0 :(得分:4)
这是Haystack的已知限制,已在few different places中讨论过,其中基础文档存储需要在所有搜索模型中始终如一地命名文档字段。
建议的文档字段名称是documented in the haystack docs。换句话说,你不能在一个索引上定义title = CharField(document=True)
而在另一个索引上定义content = CharField(document=True)
,它们必须被命名为相同。
最佳实践:将索引字段命名为text
。这是recommended by the haystack docs,可以为您提供与第三方应用的最佳兼容性。