正在索引不应被索引的对象

时间:2014-07-30 19:06:09

标签: django elasticsearch django-haystack

我有一个非常基本的对象,我正在搜索。我的理解是索引的对象是基于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时,我得到了该错误。我错过了什么吗?任何人都可以向我解释这个。

1 个答案:

答案 0 :(得分:0)

也许您需要运行rebuild_index而不是update_index?看起来您的搜索索引中有一个旧对象需要清除。