私はdjango-haystackで遊んでいて、elasticsearchでそれを実装しようとしています(既にやっていました)。私のモデルは title
, content
また、 tags
フィールドは ManyRelatedManager
:
tags = models.ManyToManyField( "Tag", through = "PostTags" )
私の検索インデックスオブジェクトは次のように構築されます。
class PostIndex( indexes.SearchIndex, indexes.Indexable ):
text = indexes.CharField( document = True, use_template = True )
title = indexes.CharField( model_attr = "title", boost = 1.125 )
content = indexes.CharField( model_attr = "content" )
date_added = indexes.DateTimeField( model_attr = "date_added" )
私の最初の質問は...どのようにタグを含めるのですか? PostIndex
オブジェクト?タイトルとコンテンツに比べてタグにはるかに高いブーストを与えたいです。
post_text.txt
テンプレート:
{{ object.title }}
{{ object.content }}
{% for tag in object.tags.all %}
{{ tag.name }}
{% endfor %}
回答:
回答№1は0タグのマルチファセットフィールドを追加し、インデックス作成時にそれを入力およびブーストできます。 PostIndexモデルで:
tags = FacetMultiValueField(boost = 2)
そして
def prepare_tags(self, obj):
return [t.name for t in obj.tags.all()]