Django - Haystack在两个不同的应用程序中

时间:2012-01-22 23:41:39

标签: django-haystack

我在一个应用程序中使用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'必须使用相同的字段名。

1 个答案:

答案 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,可以为您提供与第三方应用的最佳兼容性。