from haystack import indexes

from blog.models import Article


class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
    """
    文章搜索索引类

    这个类用于定义Django Haystack搜索引擎中文章的索引结构。
    它继承自SearchIndex和Indexable，提供了文章模型的全文搜索功能。
    """

    # 主搜索字段，document=True表示这是主要的搜索内容字段
    # use_template=True表示使用模板文件来定义索引内容
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        """
        获取与此索引关联的Django模型

        Returns:
            Model: 返回Article模型类
        """
        return Article

    def index_queryset(self, using=None):
        """
        定义要建立索引的查询集

        这个方法返回需要被索引的文章集合，这里只索引已发布(status='p')的文章，
        草稿文章不会被包含在搜索索引中。

        Args:
            using: 可选参数，指定使用的搜索引擎别名

        Returns:
            QuerySet: 包含所有已发布文章的查询集
        """
        return self.get_model().objects.filter(status='p')
