实现数据库搜索

时间:2012-06-13 14:08:47

标签: django search django-models django-haystack

目前我有一个课程数据库,它有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学术写作Cat1 Cat3

我正在尝试通过文本查询实现搜索以查找课程,所以我尝试了Haystack(使用Whoosh作为引擎),但是为了更容易索引我只是在名为{{1的模型中添加了一个新列我只是在其中添加了每门课程的Unicode文本。这个方法运行得很好,但显然它不够健壮,因为这只是我学习目的的一个小项目,我想知道更有效的方法来完成这个搜索。任何想法?

1 个答案:

答案 0 :(得分: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,这样您就不会在索引中出现垃圾。