Python Django Haystack在两(多)个字段上的自动完成

Python Django Haystack在两(多)个字段上的自动完成,python,django,django-haystack,whoosh,Python,Django,Django Haystack,Whoosh,我使用haystack 1.2.6和Whoosh 2.4以及Django 1.3。 假设下面的模型描述了一个假设的帖子 Post(models.Model): title = models.CharField() body = models.TextField() 我们构建了如下post索引,用于在body字段上自动完成: PostIndex(SearchIndex): text = CharField(document=True, use_template=True)

我使用haystack 1.2.6和Whoosh 2.4以及Django 1.3。 假设下面的模型描述了一个假设的帖子

Post(models.Model):
    title = models.CharField()
    body = models.TextField()
我们构建了如下post索引,用于在body字段上自动完成:

PostIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    content_auto = indexes.EdgeNgramField(model_attr='body')
在彻底阅读了haystack文档之后,我找不到是否可以在标题和正文字段上自动完成


所以。。。是可能还是

我是根据自己的想法来做的。您只需为要在索引中自动完成的每个字段创建一个EdgeNgramField,然后将自动完成应用于两个不同的搜索查询集并将它们连接起来:

sqs = SearchQuerySet().models(Post)
sqs1 = sqs.filter(title_auto=q)
sqs2 = sqs.filter(body_auto=q)

sqs = sqs1 | sqs2

如果你必须做额外的过滤,你需要在自动完成后再做(至少这是我唯一的工作方式)。

这里有一个更简单的方法,在模板中进行串联&使用
EdgeNgramField
(尽管在帖子正文上做这件事很昂贵:

#In search_indexes.py
PostIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)

#In <app>\template\search\index\<app>\post_text.txt
{{ object.title }} {{object.body}}
p.S.使用Haystack 2.x

sqs = SearchQuerySet().models(Post).autocomplete(text='hello')