Django-Haystack / Whoosh - ошибка перестроения индекса - PullRequest
3 голосов
/ 06 августа 2010

Python 2.5, Django 1.2.1, самый последний стог сена, самый последний свист

Это мой первый вник в Джанго-Хейстек. Я следовал руководству «Приступая к работе» из Хейстека, и, казалось, все шло хорошо, пока я не начал строить индекс.

Итак, запуск «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, получил ту же ошибку. Есть ли какая-то конфигурация Whoosh, которую я не сделал?

Обновление : После использования приведенного ниже предложения от 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'

Мне интересно, использую ли я несовместимую версию Whoosh .... Я взял последнюю версию 1.0.0b2 ... http://pypi.python.org/pypi/Whoosh/

обновление : Оказывается, это проблема версии. В настоящее время Хейстек привязан к свисту 0.3.18

Ответы [ 3 ]

6 голосов
/ 06 августа 2010

У меня была такая же проблема только сейчас. Вы пробовали »update_index« вместо »rebuild_index«? Казалось, это работает для меня ...

1 голос
/ 29 мая 2011

Установка Свист 0.3.18 решил проблему на моей стороне

0 голосов
/ 29 сентября 2014

Если вы нашли этот вопрос при попытке удалить запись из индекса, вам может понадобиться использовать IndexWriter для удаления записи, а не объект FileIndex;Например:

Вместо:

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()
...