0

現在、コースのデータベースがあり、6 つの列があります。

class Course(models.Model):
    title = models.CharField(max_length=50)
    number = models.CharField(max_length=12)
    Cat1 = models.BooleanField()
    Cat2 = models.BooleanField()
    Cat3 = models.BooleanField()
    department = models.ForeignKey(Department)

このコースの unicode メソッドは、次のような出力を行うように作成されています。

def __unicode__(self):
        return u'%s %s %s %s %s %s' % (self.department, self.number, self.title, 'CAT1' if self.Cat1 else '','Cat2' if self.Cat2 else '','Cat3' if self.Cat3 else '')

これは次のようなものを返します: ENG 1104 Academic Writing Cat1 Cat3

テキストクエリでコースを見つける検索を実装しようとしているので、Haystack (エンジンとして Whoosh を使用) を試しましたが、インデックスを作成しやすくするために、 という名前のモデルに新しい列をtext追加しました。各コースの Unicode テキスト。この方法はかなりうまく機能しますが、明らかに堅牢ではありません。これは学習目的の私の小さなプロジェクトにすぎないため、この検索を実行するためのより効率的な方法を知りたいです。何か案は?

4

1 に答える 1

1

Haystack では、モデルを変更する必要はありません。推奨される方法は、テンプレートを使用することです。

class CourseIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    ...

次に、 の形式で名前が付けられたファイルを作成しますtemplates/search/indexes/[app]/[model]_[indexfield].txt。したがって、この場合は になりますtemplates/search/indexes/yourapp/course_text.txt。次に、標準の Django テンプレート タグなどを使用して、モデルのプレーン テキスト表現を作成します。

{{ object.title }}
{{ object.number }}
{{ object.department.name }}

好きなだけ情報を追加してください。HTML を含むリッチ テキスト フィールドがある場合は、忘れずに を使用striptagsしてください。そうすれば、インデックスにゴミが残ることはありません。

于 2012-06-13T15:06:08.870 に答える