Xapian-haystack: рдЯрд░реНрдо рдмрд╣реБрдд рд▓рдВрдмрд╛ рдореБрджреНрджрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдордИ 2011  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: notanumber/xapian-haystack

When I run manage.py rebuild_index I get following error: рдЬрдм рдореИрдВ manage.py rebuild_index рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

```Traceback (most recent call last): ``` рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
File "./manage.py", line 11, in рдлрд╝рд╛рдЗрд▓ "./manage.py", рдкрдВрдХреНрддрд┐ 11, in
execute_manager(settings) execute_manager (рд╕реЗрдЯрд┐рдВрдЧреНрд╕)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 438, in execute_manager рдлрд╝рд╛рдЗрд▓ " /home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/init .py", рд▓рд╛рдЗрди 438, execute_manager рдореЗрдВ
utility.execute() рдЙрдкрдпреЛрдЧрд┐рддрд╛.рдирд┐рд╖реНрдкрд╛рджрди ()
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 379, in execute рдлрд╝рд╛рдЗрд▓ " /home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/init .py", рд▓рд╛рдЗрди 379, рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ
self.fetch_command(subcommand).run_from_argv(self.argv) self.fetch_command(subcommand).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 рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", рдкрдВрдХреНрддрд┐ 191, 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 рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", рд▓рд╛рдЗрди 220, рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ
output = self.handle(_args, *_options) рдЖрдЙрдЯрдкреБрдЯ = рд╕реЗрд▓реНрдл.рд╣реИрдВрдбрд▓ (_args, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/rebuild_index.py", line 14, in handle рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/rebuild_index.py", рд▓рд╛рдЗрди 14, рд╣реИрдВрдбрд▓ рдореЗрдВ
call_command('update_index', *_options) call_command('update_index', *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/ init .py", line 166, in call_command рдлрд╝рд╛рдЗрд▓ " /home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/init .py", рд▓рд╛рдЗрди 166, call_command рдореЗрдВ
return klass.execute(_args, *_defaults) рд╡рд╛рдкрд╕реА klass.execute(_args, *_defaults)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", рд▓рд╛рдЗрди 220, рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ
output = self.handle(_args, *_options) рдЖрдЙрдЯрдкреБрдЯ = рд╕реЗрд▓реНрдл.рд╣реИрдВрдбрд▓ (_args, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 184, in handle рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", рд▓рд╛рдЗрди 184, рд╣реИрдВрдбрд▓ рдореЗрдВ
return super(Command, self).handle(_apps, *_options) рд╕реБрдкрд░ рд░рд┐рдЯрд░реНрди (рдХрдорд╛рдВрдб, рд╕реЗрд▓реНрдл)ред рд╣реИрдВрдбрд▓ (_apps, *_options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", line 286, in handle рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py", рд▓рд╛рдЗрди 286, рд╣реИрдВрдбрд▓ рдореЗрдВ
app_output = self.handle_app(app, *_options) app_output = self.handle_app (рдРрдк, *_рд╡рд┐рдХрд▓реНрдк)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 218, in handle_app рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", рд▓рд╛рдЗрди 218, рд╣реИрдВрдбрд▓_рдПрдк рдореЗрдВ
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 рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", рд▓рд╛рдЗрди 100, do_update рдореЗрдВ
index.backend.update(index, current_qs) index.backend.update(index, current_qs)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/xapian_backend.py", line 257, in update рдлрд╝рд╛рдЗрд▓ "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/xapian_backend.py", рд▓рд╛рдЗрди 257, рдЕрджреНрдпрддрди рдореЗрдВ
database.replace_document(document_id, document) database.replace_document(document_id, document)
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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@notanumber @jorgecarleitao What do you think about this https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ? @notannumber @jorgecarleitao рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ 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. рдЯреЗрдХреНрд╕реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдорддреМрд░ рдкрд░ 245 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ xapian рд╕реЗ рд╣реА рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ [рдкреБрдирдГ] рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

en

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

I've created quick fix, it just ignores such error and I think documents with invalid terms are not added to index completely. рдореИрдВрдиреЗ рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдРрд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдорд╛рдиреНрдп рд╢рд░реНрддреЛрдВ рд╡рд╛рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред

``` lorien@big :/tmp/xapian-haystack$ git diff ``` рд▓реЙрд░рд┐рдпрди @ рдмрдбрд╝рд╛ : / tmp / xapian-haystack $ git diff
diff --git a/xapian_backend.py b/xapian_backend.py рдЕрдВрддрд░ --git a/xapian_backend.py b/xapian_backend.py
index fbbe221..1884613 100755 рд╕реВрдЪрдХрд╛рдВрдХ 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 @@ рдХреНрд▓рд╛рд╕ рд╕рд░реНрдЪрдмреИрдХрдПрдВрдб (рдмреЗрд╕ рд╕рд░реНрдЪрдмреИрдХрдПрдВрдб):
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) database.replace_document(document_id, document)
  • try: рдкреНрд░рдпрддреНрди:
  • database.replace_document(document_id, document) database.replace_document(document_id, document)
  • except xapian.InvalidArgumentError, ex: xapian.InvalidArgumentError рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЙрджрд╛:
  • ``` ```
    sys.stderr.write('xapian.InvalidArgumentErrorn') sys.stderr.write('xapian.InvalidArgumentErrorn')

except UnicodeDecodeError: UnicodeDecodeError рдХреЛ рдЫреЛрдбрд╝рдХрд░:
sys.stderr.write('Chunk failed.n') sys.stderr.write ('рдЪрдВрдХ рд╡рд┐рдлрд▓ред рдПрди')
``` ```


en

This is actually raised by Xapian itself. рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Xapian рджреНрд╡рд╛рд░рд╛ рд╣реА рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред I've left the exception to bubble up so it's possible for a developer to see the issue. рдореИрдВрдиреЗ рдмрдмрд▓ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред The solution is to ensure your terms are no longer than 245 characters, unfortunately. рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╢рд░реНрддреЗрдВ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ 245 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВред

en

@notanumber @jorgecarleitao What do you think about this https://github.com/Alir3z4/xapian-haystack/commit/a249b46c48957f4d8a776ef41b0ce12490ad52dd ? @notannumber @jorgecarleitao рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ 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. рдЯреЗрдХреНрд╕реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдорддреМрд░ рдкрд░ 245 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ xapian рд╕реЗ рд╣реА рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ [рдкреБрдирдГ] рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

en
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

hansent picture hansent  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AndreaCrotti picture AndreaCrotti  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DarwinSurvivor picture DarwinSurvivor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nMustaki picture nMustaki  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ