我正在尝试实现屈服结果,只搜索一个单词的一部分(根据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.1
,Django-haystack 1.2.7
和Django 1.4
。
答案 0 :(得分:3)
所以这就是我现在正在解决的问题。
而不是:
content_auto = indexes.EdgeNgramField(model_attr='content')
使用:
content_auto = indexes.EdgeNgramField(use_template=True)
然后您可以为这些创建模板。例如,我的ItemIndex
应用中有catalog
,我想搜索name
和description
。因此,我在名为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)