Django-Haystack / Whoosh - 重建索引错误

时间:2010-08-06 13:17:27

标签: python django django-haystack whoosh

Python 2.5,Django 1.2.1,最近的干草堆,最近的飞快移动

这是我第一次深入研究Django-Haystack。我正在关注Haystack的“入门”指南,一切似乎都很顺利,直到我去构建索引。

因此,运行“manage.py rebuild_index”会向我发回信息:

Traceback (most recent call last):
  File "/Users/steenb/Documents/Aptana Studio Workspace/bucksac/buckshr/manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Python/2.5/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Library/Python/2.5/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 218, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.5/site-packages/haystack/management/commands/rebuild_index.py", line 13, in handle
    call_command('clear_index', **options)
  File "/Library/Python/2.5/site-packages/django/core/management/__init__.py", line 166, in call_command
    return klass.execute(*args, **defaults)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 218, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.5/site-packages/haystack/management/commands/clear_index.py", line 38, in handle
    sb.clear()
  File "/Library/Python/2.5/site-packages/haystack/backends/whoosh_backend.py", line 212, in clear
    self.index.commit()
AttributeError: 'FileIndex' object has no attribute 'commit'

不确定甚至从哪里开始......有没有人遇到过这个?

对解决方案的任何想法?

更新: 用python 2.6试过这个,得到了同样的错误。是否有一些我没有做过的飞快移动配置?

更新: 在使用philippbosch的以下建议后,第一个错误不再出现了,但现在我得到了这个:

Traceback (most recent call last):
  File "/Users/steenb/Documents/Aptana Studio Workspace/bucksac/buckshr/manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Python/2.5/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Library/Python/2.5/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 218, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.5/site-packages/haystack/management/commands/update_index.py", line 69, in handle
    return super(Command, self).handle(*apps, **options)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 282, in handle
    app_output = self.handle_app(app, **options)
  File "/Library/Python/2.5/site-packages/haystack/management/commands/update_index.py", line 123, in handle_app
    index.backend.update(index, small_cache_qs[start:end])
  File "/Library/Python/2.5/site-packages/haystack/backends/whoosh_backend.py", line 163, in update
    writer = AsyncWriter(self.index.writer, postlimit=self.post_limit)
TypeError: __init__() got an unexpected keyword argument 'postlimit'

我想知道我是否正在使用一个不相容的飞快移动版......我抓住了最新的1.0.0b2 ...... http://pypi.python.org/pypi/Whoosh/

更新: 原来这是一个版本问题。目前,Haystack与呐喊0.3.18相关联

3 个答案:

答案 0 :(得分:6)

我刚才遇到了同样的问题。您是否尝试过»update_index«而不是»rebuild_index«?这似乎对我有用......

答案 1 :(得分:1)

安装Whoosh 0.3.18解决了我身边的问题

答案 2 :(得分:0)

如果在尝试从索引中删除条目时发现此问题,则可能需要使用IndexWriter删除条目,而不是FileIndex对象; e.g:

而不是:

ix = open_dir('index')
ix.delete_by_term('path', u'/a/b/c')
ix.commit()

抛出上面讨论的错误,您可以通过运行:

删除文件
ix = open_dir('index')
writer = ix.writer()
writer.delete_by_term('path', u'/a/b/c')
writer.commit()