Files
Achievement_Inputing/elastic/documents.py
2025-11-22 11:45:09 +08:00

68 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
email = fields.KeywordField()
password_hash = fields.KeywordField()
password_salt = fields.KeywordField()
permission = fields.IntegerField() # 还是2种权限0为管理员1为用户区别在于0有全部权限1在数据管理页面有搜索框但是索引到的录入信息要根据其用户id查询其key若其中之一与用户的manage_key字段匹配就显示否则不显示
key = fields.KeywordField(multi=True) #表示该用户的关键字举个例子学生A的key为"2024届人工智能1班","2024届""计算机与人工智能学院" 班导师B的key为"计算机与人工智能学院"
manage_key = fields.KeywordField(multi=True) #表示该用户管理的关键字非管理员班导师B的manage_key为"2024届人工智能1班"
#那么学生A就可以在数据管理页面搜索到自己的获奖数据而班导师B就可以在数据管理页面搜索到所有人工智能1班的获奖数据。也就是说学生A和班导师B都其实只有用户权限
class Django:
model = User
# fields列表应该只包含需要特殊处理的字段或者可以完全省略
# 因为我们已经显式定义了所有字段
@GLOBAL_INDEX.doc_type
class GlobalDocument(Document):
type_list = fields.KeywordField()
keys_list = fields.KeywordField(multi=True)
class Django:
model = ElasticNews
@GLOBAL_INDEX.doc_type
class RegistrationCodeDocument(Document):
code = fields.KeywordField() #具体值
keys = fields.KeywordField(multi=True) #对应的key
manage_keys = fields.KeywordField(multi=True) #对应的manage_key
created_at = fields.DateField() #创建时间
expires_at = fields.DateField() #过期时间
created_by = fields.LongField() #创建者id
class Django:
model = ElasticNews