私たちはDjango MarkupFieldを使ってMarkdownテキストを保存しています。wagtailのカスタムDjangoモデルフィールドにインデックスを付ける
File "/usr/local/lib/python3.5/dist-packages/wagtail/wagtailsearch/management/commands/update_index.py", line 120, in handle
self.update_backend(backend_name, schema_only=options.get('schema_only', False))
File "/usr/local/lib/python3.5/dist-packages/wagtail/wagtailsearch/management/commands/update_index.py", line 87, in update_backend
index.add_items(model, chunk)
File "/usr/local/lib/python3.5/dist-packages/wagtail/wagtailsearch/backends/elasticsearch.py", line 579, in add_items
bulk(self.es, actions)
File "/usr/local/lib/python3.5/dist-packages/elasticsearch/helpers/__init__.py", line 195, in bulk
for ok, item in streaming_bulk(client, actions, **kwargs):
File "/usr/local/lib/python3.5/dist-packages/elasticsearch/helpers/__init__.py", line 162, in streaming_bulk
for bulk_actions in _chunk_actions(actions, chunk_size, max_chunk_bytes, client.transport.serializer):
File "/usr/local/lib/python3.5/dist-packages/elasticsearch/helpers/__init__.py", line 61, in _chunk_actions
data = serializer.dumps(data)
File "/usr/local/lib/python3.5/dist-packages/elasticsearch/serializer.py", line 50, in dumps
raise SerializationError(data, e)
elasticsearch.exceptions.SerializationError: ({'_partials': [<markupfield.fields.Markup object at 0x7faa6e238e80>, <markupfield.fields.Markup object at 0x7faa6dbc4da0>], 'pk': '1', 'research_interests': <markupfield.fields.Markup object at 0x7faa6e238e80>, 'bio': <markupfield.fields.Markup object at 0x7faa6dbc4da0>}, TypeError("Unable to serialize <markupfield.fields.Markup object at 0x7faa6e238e80> (type: <class 'markupfield.fields.Markup'>)",))
回避策の一つはfield.raw
を返すインデックス呼び出し可能オブジェクトにあるが、その後、私たちはものを書く必要があるだろう:私たちはインデックスにしようとすると
しかし、セキレイでこれらのフィールドは、我々はこのように、Elasticsearchからシリアル化のエラーが出ます私たちがモデルで持っているすべてのMarkdownフィールドプロパティに対して呼び出すことができます。フィールドプロパティ(MarkupField
を置き換えるdjango-markupfield Markup
クラス)をget_searchable_content(value)
メソッドに拡張することでこの問題を回避できると考えていましたが、シリアライズエラーがそのまま残ります。
Wagtail + elasticsearchでカスタムDjangoフィールドのインデックスを作成するヒントはありますか?