Xapian-haystack: 期間が長すぎる問題

作成日 2011年05月22日  ·  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行目
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 execute_managerのファイル" /home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/init .py"、行438
utility.execute() 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 run_from_argvのファイル"/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/django/core/management/base.py"、行191
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) output = 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ファイル"/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) output = 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ファイル"/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py"、行184、ハンドル
return super(Command, self).handle(_apps, *_options) super(Command、self).handle(_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(app、* _options)
File "/home/lorien/web/dumpz/.env/lib/python2.6/site-packages/haystack/management/commands/update_index.py", line 218, in handle_app 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 ? @notanumber @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 `` ` lorien @ big :/ tmp / xapian-haystack $ git diff
diff --git a/xapian_backend.py b/xapian_backend.py diff --git a / xapian_backend.py b / xapian_backend.py
index fbbe221..1884613 100755インデックスfbbe221..1884613100755
--- 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 @@ class 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) 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('チャンクが失敗しました。n')
``` `` `


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 ? @notanumber @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 評価