Django-Haystack / WHOOSH - Индекс восстановления индекса
-
26-09-2019 - |
Вопрос
Python 2.5, Django 1.2.1, самый последний сена HayStack, самый недавний WHOOSH
Это мои первые дюйты в 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, а также получить ту же ошибку. Есть ли конфигурация 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/
Обновить: Оказывается, это проблема версии. В настоящее время HayStack привязан к WHOOSH 0.3.18
Решение
У меня была та же проблема только сейчас. Вы пробовали »update_index" вместо "rebuild_index"? Это, казалось, работало для меня ...
Другие советы
Установка WHOOSH 0.3.18. решил проблему на моей стороне
Если вы нашли этот вопрос, пытаясь удалить запись из индекса, вам может потребоваться использовать 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()