Xapian-haystack: Problema de término demasiado largo

Creado en 22 may. 2011  ·  3Comentarios  ·  Fuente: notanumber/xapian-haystack

When I run manage.py rebuild_index I get following error: Cuando ejecuto manage.py rebuild_index obtengo el siguiente error:

```Traceback (most recent call last): ```Rastreo (última llamada más reciente):
File "./manage.py", line 11, in Archivo "./manage.py", línea 11, en
execute_manager(settings) ejecutar_manager (configuración)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 438, in execute_manager Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", línea 438, en execute_manager
utility.execute() utilidad.ejecutar()
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 379, in execute Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", línea 379, en ejecución
self.fetch_command(subcommand).run_from_argv(self.argv) self.fetch_command(subcomando).run_from_argv(self.argv)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", línea 191, en run_from_argv
self.execute(_args, *_options. dict ) self.execute(_args, *_options. dict )
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", línea 220, en ejecución
output = self.handle(_args, *_options) salida = self.handle(_args, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/rebuild_index.py", line 14, in handle Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/rebuild_index.py", línea 14, en handle
call_command('update_index', *_options) call_command('update_index', *_opciones)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 166, in call_command Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", línea 166, en call_command
return klass.execute(_args, *_defaults) devuelve klass.execute(_args, *_defaults)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", línea 220, en ejecución
output = self.handle(_args, *_options) salida = self.handle(_args, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 184, in handle Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", línea 184, en handle
return super(Command, self).handle(_apps, *_options) devuelve super(Comando, self).handle(_apps, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 286, in handle Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", línea 286, en handle
app_output = self.handle_app(app, *_options) app_output = self.handle_app(aplicación, *_opciones)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 218, in handle_app Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", línea 218, en handle_app
do_update(index, qs, start, end, total, self.verbosity) do_update(index, qs, start, end, total, self.verbosity)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 100, in do_update Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", línea 100, en do_update
index.backend.update(index, current_qs) index.backend.update(índice, current_qs)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/xapian_backend.py", line 257, in update Archivo "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/xapian_backend.py", línea 257, en actualización
database.replace_document(document_id, document) base de datos.replace_document(document_id, documento)
xapian.InvalidArgumentError: Term too long (> 245): 4f6d6e6961206d6561206d6563756d20706f72746f202d20e2f1e520f1e2eee520edeef8f320f120f1eee1eefe0d0a566974612073696e65206c69626572746174652c206e6968696c202d20e6e8e7edfc20e1e5e720f1e2eee1eee4fb202d20ede8f7f2ee0d0a417273206c6f6e67612c207669746120627265766973 xapian.InvalidArgumentError: Term too long (> 245): 4f6d6e6961206d6561206d6563756d20706f72746f202d20e2f1e520f1e2eee520edeef8f320f120f1eee1eefe0d0a566974612073696e65206c69626572746174652c206e6968696c202d20e6e8e7edfc20e1e5e720f1e2eee1eee4fb202d20ede8f7f2ee0d0a417273206c6f6e67612c207669746120627265766973

Do you have any idea how to handle this problem?

Thanks.

P.S.
python 2.6
python-xapian (debian) 1.2.4-1
libxapian (debian) 1.2.5
recent versions of django, haystack-xapian, django-xapian
en

Comentario más útil

@notanumber @jorgecarleitao What do you think about this https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ? @notanumber @jorgecarleitao ¿Qué opinas de esto https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ?

the text document is usually more than 245, I know it's raised from xapian itself but this shouldn't break the [re]building the index. el documento de texto suele tener más de 245, sé que se genera desde el mismo xapian, pero esto no debería interrumpir la [re] construcción del índice.

en

Todos 3 comentarios

I've created quick fix, it just ignores such error and I think documents with invalid terms are not added to index completely. Creé una solución rápida, simplemente ignora dicho error y creo que los documentos con términos no válidos no se agregan al índice por completo.

``` lorien@big :/tmp/xapian-haystack$ git diff ``` lorien@big :/tmp/xapian-pajar$ git diff
diff --git a/xapian_backend.py b/xapian_backend.py diferencia --git a/xapian_backend.py b/xapian_backend.py
index fbbe221..1884613 100755 índice fbbe221..1884613 100755
--- a/xapian_backend.py --- a/xapian_backend.py
+++ b/xapian_backend.py +++ b/xapian_backend.py
@@ -259,7 +259,10 @@ class SearchBackend(BaseSearchBackend): @@ -259,7 +259,10 @@ clase SearchBackend(BaseSearchBackend):
DOCUMENT_CT_TERM_PREFIX + u'%s.%s' % DOCUMENT_CT_TERM_PREFIX + u'%s.%s' %
(obj._meta.app_label, obj._meta.module_name) (obj._meta.app_label, obj._meta.module_name)
) )

  • database.replace_document(document_id, document) base de datos.replace_document(document_id, documento)
  • try: tratar:
  • database.replace_document(document_id, document) base de datos.replace_document(document_id, documento)
  • except xapian.InvalidArgumentError, ex: excepto xapian.InvalidArgumentError, ej:
  • ``` ```
    sys.stderr.write('xapian.InvalidArgumentErrorn') sys.stderr.write('xapian.InvalidArgumentErrorn')

except UnicodeDecodeError: excepto UnicodeDecodeError:
sys.stderr.write('Chunk failed.n') sys.stderr.write('Chunk falló.n')
``` ```


en

This is actually raised by Xapian itself. En realidad, esto lo plantea el propio Xapian. I've left the exception to bubble up so it's possible for a developer to see the issue. He dejado la excepción para que aparezca para que un desarrollador pueda ver el problema. The solution is to ensure your terms are no longer than 245 characters, unfortunately. Desafortunadamente, la solución es asegurarse de que sus términos no tengan más de 245 caracteres.

en

@notanumber @jorgecarleitao What do you think about this https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ? @notanumber @jorgecarleitao ¿Qué opinas de esto https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ?

the text document is usually more than 245, I know it's raised from xapian itself but this shouldn't break the [re]building the index. el documento de texto suele tener más de 245, sé que se genera desde el mismo xapian, pero esto no debería interrumpir la [re] construcción del índice.

en
¿Fue útil esta página
0 / 5 - 0 calificaciones