我需要通过django-haystack(2.3.1)和elasticsearch后端(1.4.0)设置简单的文本搜索。
我有下一个简单的模型:
class Course(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
price = models.PositiveIntegerField()
SearchIndex看起来像这样:
class CourseIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
price = models.IntegerField(model_attr='price')
模板course_text.txt
:
{{ object.name }}
{{ object.description }}
如您所见,一切都很简单。我只需要干草堆就可以了:
SearchQuerySet.filter(text='zza')
让我回复[ <Course: Pizza> , <Course: Freezza>]
,就像django orm&#39; QuerySet
一样。但相反,我一无所获。使用SearchQuerySet.filter(text='pizza')
返回结果
官方文档说,从2.0开始,haystack默认使用contains
方法进行过滤。明确地使用它也无济于事:SearchQuerySet.filter(text__contains='zza')
autocomplete
功能也没有帮助,因为它更像starts_with
方法,而不是contains
。
然后我也尝试使用其他后端。我测试了Whoosh
但得到了与elasticsearch
相同的结果。在绝望中,我已插入SimpleBackend
,这只是为了在大海捞针中进行测试而且有效!
请大家,如果您有任何想法如何解决这个问题,请在这里与他们分享。
从我的观点来看,后端配置似乎是haystack提供弹性搜索和飞快移动的问题。
谢谢