|
|
|
@ -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
|
|
|
|
|
|
|
|
|
|
|
|
|