2016-05-02 89 views
1

在数据库中,我有名称为“Product 1”,“Product 2”等的产品。搜索“Produc”应该返回许多值,但我什么也没有得到。 我的指数:Django haystack elasticsearch自动完成功能不起作用

from haystack import indexes 

from .models import Product 


class ProductIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True) 
    id = indexes.IntegerField(model_attr='id') 
    title = indexes.CharField(model_attr='title') 
    slug = indexes.CharField(model_attr='slug') 
    description = indexes.CharField(model_attr='description') 
    content_auto = indexes.NgramField(model_attr='title') 

    def get_model(self): 
     return Product 

    def index_queryset(self, using=None): 
     return self.get_model().objects.all() 

结果从外壳:

In [3]: SearchQuerySet().autocomplete(content_auto='produc') 
Out[3]: [] 

In [4]: SearchQuerySet().autocomplete(content_auto='product') 
Out[4]: [<SearchResult: catalogue.product (pk=u'4')>, <SearchResult:  
catalogue.product (pk=u'9')>, <SearchResult: catalogue.product 
(pk=u'11')>, <SearchResult: catalogue.product (pk=u'16')>, 
<SearchResult: catalogue.product (pk=u'23')>, <SearchResult: 
catalogue.product (pk=u'28')>, <SearchResult: catalogue.product 
(pk=u'30')>, <SearchResult: catalogue.product (pk=u'35')>, <SearchResult: 
catalogue.product (pk=u'42')>, <SearchResult: catalogue.product 
(pk=u'47')>, <SearchResult: catalogue.product (pk=u'54')>, <SearchResult: 
catalogue.product (pk=u'59')>, <SearchResult: catalogue.product 
(pk=u'61')>, <SearchResult: catalogue.product (pk=u'66')>, <SearchResult: 
catalogue.product (pk=u'73')>, <SearchResult: catalogue.product 
(pk=u'78')>, <SearchResult: catalogue.product (pk=u'80')>, <SearchResult: 
catalogue.product (pk=u'85')>, <SearchResult: catalogue.product 
(pk=u'92')>, u'...(remaining elements truncated)...'] 
+0

如果为'content_auto'使用'EdgeNgramField',你也有同样的问题吗? –

回答

0

如果您刚添加的content_auto场,您可能需要运行manage.py rebuild_index创建更新的索引。

+0

我在每次更改后运行rebuild_index。是的,使用EdgeNgramField时我遇到同样的问题。 – Taras

相关问题