Python Django haystack:在添加自动完成所需的“content\u auto”行后,重建索引失败(haystack.exceptions.SearchFieldError)
我试图实现只搜索一个单词的一部分的结果(如果我没有弄错的话,根据Haystack文档称之为Python Django haystack:在添加自动完成所需的“content\u auto”行后,重建索引失败(haystack.exceptions.SearchFieldError),python,autocomplete,django-haystack,whoosh,Python,Autocomplete,Django Haystack,Whoosh,我试图实现只搜索一个单词的一部分的结果(如果我没有弄错的话,根据Haystack文档称之为autocomplete) 示例: 搜索“gol” 结果“金鱼” 我试过什么? 按照中的要求,我在索引类中添加了以下行: content_auto = indexes.EdgeNgramField(model_attr='content') 然后做了python manage.py重建\u索引 但是,重建索引时产生了一个错误haystack.exceptions.SearchFieldError:模型“”
autocomplete
)
示例:
搜索“gol”
结果“金鱼”
我试过什么?
按照中的要求,我在索引类中添加了以下行:
content_auto = indexes.EdgeNgramField(model_attr='content')
然后做了python manage.py重建\u索引
但是,重建索引时产生了一个错误haystack.exceptions.SearchFieldError:模型“”没有模型属性“content”。
其中Reginald
是我索引表中的第一个条目,Person
是我索引的模型
实际上,我的模型没有一个名为content
的字段,但正如文档中所示,它不需要这样的字段
我正在使用
Whoosh 2.4.1
,Django haystack 1.2.7
和Django 1.4
,model\u attr用于引用现有的模型属性、可调用或关系:
所以我现在就是这样解决这个问题的 而不是:
content\u auto=index.EdgeNgramField(model\u attr='content')
使用:
content\u auto=index.EdgeNgramField(使用模板=True)
然后您可以为这些创建一个模板。例如,我在我的目录
应用程序中有一个项目索引
,我想在其中搜索名称
和描述
。因此,我在templates/search/index/catalog/
中创建了一个名为item\u content\u auto.txt的文件,其中包含以下内容:
{{ object.name }}
{{ object.description }}
这似乎是我所希望的。如果'content'
起作用,则会有一点繁琐,但它应该足够了。这里有一个更新的示例供参考(请参阅):
我知道这是一个老问题,但你有没有弄明白?没有。我在这个问题上工作的时间不长。是的,但你看:他们说你只需要使用“内容”,但这不起作用。他们一定已经更改了,但没有更新文档。
#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)