我正在尝试将django-haystack集成到博客中。
这是我的Post
模型:
class Post(models.Model):
slug = models.CharField(max_length=2000)
title = models.CharField(max_length=2000)
content = models.TextField(blank=True)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
def __str__(self):
return self.title
以下是search_indexes.py
文件中的代码:
class PostIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
content = indexes.CharField(model_attr='content')
def get_model(self):
return Post
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(created_on__lte=datetime.datetime.now())
如您所见,我正在使用EdgeNgramField
类型来搜索部分项。
现在,如果我按预期搜索术语elastic
,则haystack会在elastic
或title
字段的某个地方返回包含content
的帖子。但是,haystack还返回了一些其他帖子,这些帖子在elastic
或title
中都没有术语content
。
我该如何解决?
我已经在django-haystack(2.8.1),elasticsearch-2.4.2和django-1.11上测试了此代码
PS:这是我第一次接触弹性搜索。