from django_elasticsearch_dsl import Document, fields, Index from .models import AchievementData, User, ElasticNews from .indexes import * ACHIEVEMENT_INDEX = Index(ACHIEVEMENT_INDEX_NAME) ACHIEVEMENT_INDEX.settings(number_of_shards=1, number_of_replicas=0) USER_INDEX = Index(USER_INDEX_NAME) USER_INDEX.settings(number_of_shards=1, number_of_replicas=0) GLOBAL_INDEX = Index(GLOBAL_INDEX_NAME) GLOBAL_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'}}) time = fields.DateField() 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列表应该只包含需要特殊处理的字段,或者可以完全省略 # 因为我们已经显式定义了所有字段 @GLOBAL_INDEX.doc_type class GlobalDocument(Document): type_list = fields.KeywordField() class Django: model = ElasticNews