Django-haystack:在添加自动完成所需的`content_auto`行后,rebuild_index失败(haystack.exceptions.SearchFieldError)

时间:2013-01-23 12:00:25

标签: python autocomplete django-haystack whoosh

我正在尝试实现屈服结果,只搜索一个单词的一部分(根据Haystack文档称为autocomplete,如果我没有记错的话)。

示例:

搜索"gol"

结果"goldfish"

我尝试了什么?

我按照step 1 of the docs中的要求做了,我在我的索引类中添加了以下行:

content_auto = indexes.EdgeNgramField(model_attr='content')

然后python manage.py rebuild_index

重建索引却产生了错误 haystack.exceptions.SearchFieldError: The model '<Person: Reginald>' does not have a model_attr 'content'. Reginald是我索引表中的第一个条目,Person是我编入索引的模型。

现在我的模型确实没有名为content的字段,但是在文档中显示它不需要有这样的字段。

我正在使用Whoosh 2.4.1Django-haystack 1.2.7Django 1.4

3 个答案:

答案 0 :(得分:3)

所以这就是我现在正在解决的问题。

而不是:

content_auto = indexes.EdgeNgramField(model_attr='content')

使用:

content_auto = indexes.EdgeNgramField(use_template=True)

然后您可以为这些创建模板。例如,我的ItemIndex应用中有catalog,我想搜索namedescription。因此,我在名为templates/search/indexes/catalog/的{​​{1}}中创建了一个文件,其中包含以下内容:

item_content_auto.txt

这似乎是我想要的功能。比{{ object.name }} {{ object.description }} 工作更乏味,但它应该足够了。

答案 1 :(得分:1)

以下是供参考的更新示例(请参阅here):

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

    def get_model(self):
        return Book

#template
{{object.name}}

#query
SearchQuerySet().autocomplete(text=my_query)

答案 2 :(得分:0)