from django_elasticsearch_dsl import Document, fields, Index from .models import AchievementData, User, ElasticNews # 获奖数据索引 - 对应Flask项目中的wordsearch266666 ACHIEVEMENT_INDEX = Index('wordsearch266666') ACHIEVEMENT_INDEX.settings(number_of_shards=1, number_of_replicas=0) # 用户数据索引 - 对应Flask项目中的users USER_INDEX = Index('users') USER_INDEX.settings(number_of_shards=1, number_of_replicas=0) # 新闻索引 - 保留原有功能 NEWS_INDEX = Index('elastic_news') NEWS_INDEX.settings(number_of_shards=1, number_of_replicas=0) @ACHIEVEMENT_INDEX.doc_type class AchievementDocument(Document): """获奖数据文档映射""" writer_id = fields.TextField(fields={'keyword': {'type': 'keyword'}}) data = fields.TextField( analyzer='ik_max_word', search_analyzer='ik_smart', fields={'keyword': {'type': 'keyword'}} ) image = fields.KeywordField() class Django: model = AchievementData # fields列表应该只包含需要特殊处理的字段,或者可以完全省略 # 因为我们已经显式定义了所有字段 @USER_INDEX.doc_type class UserDocument(Document): """用户数据文档映射""" user_id = fields.LongField() username = fields.KeywordField() password = fields.KeywordField() permission = fields.IntegerField() class Django: model = User # fields列表应该只包含需要特殊处理的字段,或者可以完全省略 # 因为我们已经显式定义了所有字段 @NEWS_INDEX.doc_type class NewsDocument(Document): """新闻文档映射 - 保留原有功能""" id = fields.IntegerField(attr='id') title = fields.TextField(fields={'keyword': {'type': 'keyword'}}) content = fields.TextField(fields={'keyword': {'type': 'keyword'}}) class Django: model = ElasticNews