【问题标题】:django-haystack gives error Unable to open index at search/xapian/xapian_indexdjango-haystack 给出错误 Unable to open index at search/xapian/xapian_index
【发布时间】:2012-07-30 22:42:49
【问题描述】:

我正在尝试使用带有 xapian 后端的 django-haystack 在我的 django 网站上设置搜索功能。我按照以下说明进行操作: http://django-haystack.readthedocs.org/en/latest/tutorial.html

当我输入搜索时,它会引发错误: 无法在 search/xapian/xapian_index 处打开索引

我运行时似乎没有创建搜索索引 ./manage.py 重建索引 不过当时没有报错。

我正在尝试在 myapp/models.py 中索引以下模型:

class MyMsg (models.Model):
    msg = models.TextField(max_length=2000)
    pub_date = models.DateTimeField('date published')
    author = models.ForeignKey(User)
    def __unicode__(self):
        return self.msg

我在 myapp/search_index.py 中有以下搜索索引:

class MyMsgIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    author = indexes.CharField(model_attr='author')
    pub_date = indexes.DateTimeField(model_attr='pub_date')

    def get_model(self):
        return MyMsg

    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

我正在使用: 干草堆 1.2.4 xapian 1.2.12 mac OS X 10.6.8

提前感谢您的帮助。

【问题讨论】:

  • 当您运行rebuild_index 时,您是否看到有关它已索引多少模型的统计信息?我注意到本教程没有关于显式创建任何模型对象的步骤。
  • python manage.py rebuild_index 的输出是:警告:这将不可挽回地从连接“默认”中的搜索索引中删除所有内容。在此之后您的选择是从备份中恢复或通过rebuild_index 命令重建。您确定要继续吗? [y/N] y 删除索引中的所有文档,因为您这么说。已删除所有文档。
  • 就这样?那么您是否创建了任何 Note 对象(或您选择索引的任何模型)?
  • 我猜你的数据库中没有任何 Note 对象,因此 rebuild_index 没有找到任何工作要做,因此你的 xapian 索引没有得到建成。
  • 我没有看到任何对笔记对象的引用。你能解释一下吗?

标签: django django-haystack xapian


【解决方案1】:

您说您使用的是 Haystack 1.2.4,但您链接到了新的 2.x beta 文档。在较早版本的 Haystack 中,您需要添加“自动发现”步骤。

它涉及在settings.py 中创建一个名为HAYSTACK_SITECONF 的变量,该变量指向一个干草堆配置模块。在该模块中,您至少需要有以下几行:

import haystack
haystack.autodiscover()

请参阅您的版本的教程: http://django-haystack.readthedocs.org/en/v1.2.4/tutorial.html

这可能是问题吗?

【讨论】:

  • 感谢您指出不一致之处。我没注意到。我尝试将 HAYSTACK_SITECONF 添加到我的 settings.py 和自动发现中,但此消息:django.core.exceptions.ImproperlyConfigured: The HAYSTACK_SITECONF setting is no longer used & can be removed. 和 xapian_index 仍未创建。
  • 你知道你有什么版本的Haystack吗?
  • 下载的文件名称中有v1.2.0(不确定我在哪里看到1.2.4),但haystack/__init__.py__version__ = (2, 0, 0, 'beta') 行,这解释了HAYSTACK_SITECONF 标记错误的原因。 2.0.0 版可以工作还是我应该恢复到旧版本?
  • 我没有使用 2.x 的经验,但它应该可以工作。我使用带有 Xapian 的 1.2.x 版本,它对我来说运行良好。我认为我们无法在 StackOverflow 上深入了解这一点。我们可以在聊天或 IRC 上尝试一些东西。 Haystack 作者在#haystack 频道中为 IRC(freenode)提供了大力支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 2022-12-01
  • 2021-09-28
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多