7

我正在尝试为仅搜索单词的一部分实现产生结果(autocomplete如果我没记错的话,根据 Haystack 文档调用)。

例子:

搜索"gol"

结果"goldfish"

我尝试了什么?

我按照文档步骤 1 中的要求做了,我在我的 Index 类中添加了以下行:

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.7Django 1.4.

4

3 回答 3

3

所以这就是我现在解决这个问题的方法。

代替:

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

采用:

content_auto = indexes.EdgeNgramField(use_template=True)

然后你可以为这些创建一个模板。例如,我的应用程序中有一个ItemIndexcatalog我想在其中搜索namedescription. 因此,我在templates/search/indexes/catalog/called中创建了一个文件item_content_auto.txt,其中包含以下内容:

{{ object.name }}
{{ object.description }}

这似乎按照我的意愿运作。比'content'工作时更乏味,但应该足够了。

于 2014-03-05T19:01:52.647 回答
1

这是一个更新的示例供参考(请参阅此处):

#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)
于 2017-03-13T09:51:28.840 回答
0

model_attr 用于引用现有模型属性、可调用或关系:

http://django-haystack.readthedocs.org/en/v1.2.7/searchfield_api.html#SearchField.model_attr http://django-haystack.readthedocs.org/en/v2.1.0/searchfield_api.html#model-attr

于 2014-03-05T14:01:03.870 回答