|
|
|
|
@ -1,18 +1,45 @@
|
|
|
|
|
# 导入Django命令基类,用于创建自定义管理命令
|
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
|
|
|
|
|
|
from blog.documents import ElapsedTimeDocument, ArticleDocumentManager, ElaspedTimeDocumentManager, \
|
|
|
|
|
ELASTICSEARCH_ENABLED
|
|
|
|
|
# 导入博客相关的Elasticsearch文档管理器和配置
|
|
|
|
|
from blog.documents import (
|
|
|
|
|
ElapsedTimeDocument, # 耗时统计文档模型
|
|
|
|
|
ArticleDocumentManager, # 文章文档管理器
|
|
|
|
|
ElaspedTimeDocumentManager, # 耗时统计文档管理器(注:原拼写可能存在笔误,应为Elapsed)
|
|
|
|
|
ELASTICSEARCH_ENABLED # Elasticsearch启用状态标记
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO 参数化
|
|
|
|
|
# TODO: 后续可优化为支持参数化(如指定重建的索引类型等)
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
|
"""
|
|
|
|
|
Django自定义管理命令:构建Elasticsearch搜索索引
|
|
|
|
|
用于初始化或重建文章和耗时统计相关的搜索索引
|
|
|
|
|
"""
|
|
|
|
|
# 命令的帮助信息(使用python manage.py help build_index时显示)
|
|
|
|
|
help = 'build search index'
|
|
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
|
"""
|
|
|
|
|
命令核心执行方法
|
|
|
|
|
当运行python manage.py build_index时调用
|
|
|
|
|
"""
|
|
|
|
|
# 仅在Elasticsearch启用时执行索引构建
|
|
|
|
|
if ELASTICSEARCH_ENABLED:
|
|
|
|
|
# 构建耗时统计文档的索引
|
|
|
|
|
ElaspedTimeDocumentManager.build_index()
|
|
|
|
|
manager = ElapsedTimeDocument()
|
|
|
|
|
manager.init()
|
|
|
|
|
manager = ArticleDocumentManager()
|
|
|
|
|
manager.delete_index()
|
|
|
|
|
manager.rebuild()
|
|
|
|
|
|
|
|
|
|
# 初始化耗时统计文档的索引结构
|
|
|
|
|
elapsed_manager = ElapsedTimeDocument()
|
|
|
|
|
elapsed_manager.init() # 创建索引映射
|
|
|
|
|
|
|
|
|
|
# 处理文章文档索引:先删除旧索引,再重建
|
|
|
|
|
article_manager = ArticleDocumentManager()
|
|
|
|
|
article_manager.delete_index() # 删除现有文章索引
|
|
|
|
|
article_manager.rebuild() # 重新创建索引并同步数据
|
|
|
|
|
|
|
|
|
|
# 输出成功信息到控制台
|
|
|
|
|
self.stdout.write(self.style.SUCCESS('Successfully built search indexes'))
|
|
|
|
|
else:
|
|
|
|
|
# 当Elasticsearch未启用时,提示用户
|
|
|
|
|
self.stdout.write(self.style.WARNING('Elasticsearch is not enabled, skipping index build'))
|