cnki:修改枚举类的使用,增加单一结果搜索的model

main
zhaoxiangpeng 4 weeks ago
parent be61990806
commit aa07aa05f1

@ -7,7 +7,11 @@ import json
from typing import Union, List, Dict from typing import Union, List, Dict
from datetime import datetime, timedelta from datetime import datetime, timedelta
from science_article_cnki.models.enum_cls import ResourceType, SearchTypeId, SearchFieldEnum, OperatorEnum, LogicEnum, SearchFromId from science_article_cnki.models.enum_cls import (
ResourceType, SourceDatabaseEnum,
SearchTypeId, SearchFieldEnum, OperatorEnum, LogicEnum,
SingleResultEnum
)
DB_CODE = { DB_CODE = {
'CFLS': '总库', 'CFLS': '总库',
@ -53,7 +57,7 @@ def navigator_body(query: str = None, db_code: str = 'CFLS', **kwargs):
return _param return _param
def signal_body(query: str = None, resource_type: str = 'JOURNAL', group_id: str = 'YE', **kwargs): def signal_body(query: str = None, resource_type: str = '学术期刊', group_id: str = 'YE', **kwargs):
""" """
获取左侧导航栏单类目的聚合 获取左侧导航栏单类目的聚合
:group_id: 主要主题1; 学科2; 发表年度3; 研究层次4; 文献类型5; 文献来源6; 作者7; 机构8; 基金9 :group_id: 主要主题1; 学科2; 发表年度3; 研究层次4; 文献类型5; 文献来源6; 作者7; 机构8; 基金9
@ -65,8 +69,8 @@ def signal_body(query: str = None, resource_type: str = 'JOURNAL', group_id: str
_param = { _param = {
'queryJson': json.dumps({ 'queryJson': json.dumps({
"Platform": "", "Platform": "",
"Resource": ResourceType[resource_type].name, "Resource": ResourceType[resource_type].value,
"Classid": ResourceType[resource_type].value, "Classid": SourceDatabaseEnum[resource_type].value,
"Products": "", "Products": "",
"QNode": { "QNode": {
"QGroup": [{ "QGroup": [{
@ -101,14 +105,14 @@ def signal_body(query: str = None, resource_type: str = 'JOURNAL', group_id: str
return _param return _param
def refine_search(query: str, resource_type: str = 'JOURNAL', year=None, subject=None, code=None, **kwargs): def refine_search(query: str, resource_type: str = '学术期刊', year=None, subject=None, code=None, **kwargs):
""" """
使用专业检索式检索后再次检索年份 使用专业检索式检索后再次检索年份
""" """
_query = { _query = {
"Platform": "", "Platform": "",
"Resource": ResourceType[resource_type].name, "Resource": ResourceType[resource_type].value,
"Classid": ResourceType[resource_type].value, "Classid": SourceDatabaseEnum[resource_type].value,
"Products": "", "Products": "",
"QNode": { "QNode": {
"QGroup": [{ "QGroup": [{
@ -400,6 +404,52 @@ def add_search_word(search_content: str, base_query: dict = None):
return words_query return words_query
def add_muti_group(
project: Union[SingleResultEnum, str],
value: str,
text_or_title: str,
base_query: dict = None,
**kwargs) -> dict:
"""
添加筛选项
Key <SingleResultEnum>: 筛选项标记
Items[].Title <>: 筛选项的名称 input/@title
Items[].Name <>: 筛选项的名称 input/@title
Items[].Key <>: 筛选项的代码 input/@value
Items[].Value <>: 筛选项的代码与Items.Key一致 input/@value
Items[].Value2 <>: 空字符串
Items[].Field <>: 筛选项标记同组的Key一致
"""
if isinstance(project, SingleResultEnum):
project = project.value
elif isinstance(project, str):
project = SingleResultEnum[project].value
child_item = {
"Key": project,
"Title": "",
"Logic": 0,
"Items": [
{
"Key": value,
"Title": text_or_title,
"Logic": 1,
"Field": project,
"Operator": "DEFAULT",
"Value": value,
"Value2": "",
"Name": project,
"ExtendType": 0
}],
"ChildItems": [
]
}
if base_query:
add_limit_2query_body(child_item, "MutiGroup", base_query)
return child_item
def limit_year_range(year: int, base_query: dict = None): def limit_year_range(year: int, base_query: dict = None):
""" """
添加年份筛选 添加年份筛选
@ -494,7 +544,7 @@ def temp_refine_search(
query: str, query: str,
year: int = None, year: int = None,
updated_date: str = None, updated_date: str = None,
resource_type: str = 'JOURNAL', resource_type: str = '学术期刊',
**kwargs **kwargs
): ):
""" """
@ -508,8 +558,8 @@ def temp_refine_search(
""" """
_query = { _query = {
"Platform": "", "Platform": "",
"Resource": ResourceType[resource_type].name, "Resource": ResourceType[resource_type].value,
"Classid": ResourceType[resource_type].value, "Classid": SourceDatabaseEnum[resource_type].value,
"Products": "", "Products": "",
"QNode": { "QNode": {
"QGroup": [ "QGroup": [
@ -567,7 +617,8 @@ def temp_query_search(query_body, query: str = None, page: int = 1, page_size: i
"dstyle": "listmode", "dstyle": "listmode",
"boolSortSearch": "false", "boolSortSearch": "false",
"aside": aside, "aside": aside,
"searchFrom": "资源范围:学术期刊; 仅看有全文,中英文扩展; 时间范围:更新时间:%(updated_date)s; 来源类别:全部期刊; " % {"updated_date": updated_date}, "searchFrom": "资源范围:学术期刊; 仅看有全文,中英文扩展; 时间范围:更新时间:%(updated_date)s; 来源类别:全部期刊; " % {
"updated_date": updated_date},
"subject": "", "subject": "",
"language": "", "language": "",
"uniplatform": "", "uniplatform": "",
@ -584,7 +635,8 @@ def temp_query_search(query_body, query: str = None, page: int = 1, page_size: i
'dstyle': 'listmode', 'dstyle': 'listmode',
'boolSortSearch': "false", 'boolSortSearch': "false",
'aside': '', 'aside': '',
'searchFrom': '资源范围:学术期刊; 时间范围:更新时间:%(updated_date)s; 来源类别:全部期刊; ' % {"updated_date": updated_date}, 'searchFrom': '资源范围:学术期刊; 时间范围:更新时间:%(updated_date)s; 来源类别:全部期刊; ' % {
"updated_date": updated_date},
"subject": "", "subject": "",
"language": "", "language": "",
"uniplatform": "" "uniplatform": ""
@ -595,6 +647,20 @@ def temp_query_search(query_body, query: str = None, page: int = 1, page_size: i
adv_query_search = temp_query_search adv_query_search = temp_query_search
def single_result_nav(
queryJson: Union[dict, str],
groupId: Union[str, SingleResultEnum]
) -> Dict[str, str]:
if isinstance(queryJson, dict):
queryJson = json.dumps(queryJson, ensure_ascii=False)
if isinstance(groupId, SingleResultEnum):
groupId = groupId.value
return dict(
queryJson=queryJson,
groupId=groupId,
)
class SearchPaperArgModel: class SearchPaperArgModel:
pass pass

Loading…
Cancel
Save