我有一个非常基本的对象,我正在搜索。我的理解是索引的对象是基于index_queryset方法过滤的。我想仅索引不是草稿的问题,作者决定发布。但是,不符合此条件的对象正在编制索引,并且当返回此对象的搜索结果并且我在其上调用.object时,我得到了
ERROR Object could not be found in database for SearchResult '<SearchResult: qna.question (pk=u'869')>'
我很惊讶为什么这些对象首先被编入索引。有人知道吗?
Follows是我的SearchIndex,模型和对象,当它不应该被索引时。
class QuestionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
def get_model(self):
return Question
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(is_draft=False,
published_at__lte=datetime.now())
class Question(models.Model):
title = models.CharField(max_length=100)
published_at = models.DateTimeField(blank=True, null=True)
is_draft = models.BoolenField(default=True)
text = models.TextField()
Question.objects.create(title="shouldn't show", is_draft=False, text="Really shuldn't show")
但在更新索引并运行
之后SearchQueyset().filter(content="shouldn't show")
我在其中获得了包含is_draft = false的对象的搜索结果,当我执行search_result.object时,我得到了该错误。我错过了什么吗?任何人都可以向我解释这个。
答案 0 :(得分:0)
也许您需要运行rebuild_index
而不是update_index
?看起来您的搜索索引中有一个旧对象需要清除。