55 lines
2.5 KiB
Python
55 lines
2.5 KiB
Python
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_hash = fields.KeywordField()
|
||
password_salt = fields.KeywordField()
|
||
permission = fields.IntegerField() # 还是2种权限,0为管理员,1为用户(区别在于0有全部权限,1在数据管理页面有搜索框,但是索引到的录入信息要根据其用户id查询其key,若其中之一与用户的manage_key字段匹配就显示否则不显示)
|
||
key = fields.IntegerField() #表示该用户的关键字,举个例子:学生A的key为"2024届人工智能1班","2024届","计算机与人工智能学院" 班导师B的key为"计算机与人工智能学院"
|
||
manage_key = fields.IntegerField() #表示该用户管理的关键字(非管理员)班导师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()
|
||
|
||
class Django:
|
||
model = ElasticNews
|