readme
# 数据库展示接口说明
## 待实现功能预览(设计组)
1. 搜索
可能对Category Target Name(最有可能) Smiles(第二有可能) Activity Type(单位)进行搜索
**可能输入的内容示例:**
Category:cancer、virus、cell、kinase等等
Target Name:SARS-Cov-2,A549,MCF-7
Smiles:COc1cccc(-c2nc(O)c3cc(N4CCOCC4)ccc3n2)c1
Activity Type:u,uM,inhibition
**默认展示的灰底搜索示例**:SARS-CoV-2,Cancer,COc1cc2[nH]c3c(C)nccc3c2cc1
**搜索后返回的结果**:只保留搜索到相关的行就可以
2. 超链接跳转键
Detail Link列的内容是可用的url,展示一个url会很丑,最好前端做成按键形式
3. 筛选分类显示
默认全部展示,如果用户点击筛选窗格中的某一类 就只显示某一类
窗格和预测结果页一样的样式就可以
和搜索的先后关系问题:①先搜索 再对结果点击分类显示器进行筛选(即 在搜索结果中筛选)
②先筛选 选择类后只展示类 后搜索(即 在筛选结果中搜索)
这两种,好实现就都实现,不好实现就只搞①,每次搜索会刷新筛选情况的意思
## 介绍与开发说明
数据库展示功能接口使用了**elasticsearch**,目前所有的接口暂定都直接使用其自带的REST api。
测试环境下的链接为 <u>~~http://116.62.220.36:9200~~</u>, 目前接口没有开启安全验证,很不安全,仅供测试,后续正式环境会相应开启,但是功能api不会受到影响,即现在开发的代码后续不需要大量修改。
## 几个重要的概念
- index:类似于table(本项目所用的index名称为link)
- document: 类似于row,表示一个record
---
## API基本逻辑介绍
> 本项目只会涉及“增删改查”中的“查”的操作,故本文档只做最基本的“查”的介绍,若想了解更多有关[elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html)的内容,请移步官网查看
### 基本查询
|模式|请求方式|索引(index)|url|路径参数(均可选)|
|--|--|--|--|--|
|简单获取示例|GET|link|/link/_search|`size`(匹配的条数),`from`(页码)`q`(query)(值:key:value)|
|基本筛选|POST|link|/link/_search|`size`,`from`(同上,只不过url参数的优先级是高于下面json中的参数的|
>请求json的一个简单示例
```json
{
"query":{
"match":{
"Activity Type":"inhibition"
}
},
"from":10,
"size":15
}
```
> 与之等价的get请求url
```
/link/_search?q=Activity%Type:inhibition&from=10&size=15
```
### 单条件,分页与高亮查询
```json
{
"query":{
"match":{ // 全部匹配可以用 "match_all","match_phase":取消分词,完全匹配 还可以换成"term","prefix","wildcard"(通配符),"fuzzy":模糊查询
"<key>":"<value>"
}
},
"highlight":{
"fields":{
"*":{}
}
},
"from":<value>, // 当前页,从零开始计数,不要加双引号
"size":<value>,
"sort":{
"<your_field>":{
"order": "desc/asc" // 降序或者升序
}
}
}
```
### 多字段查询
```json
{
"query":{
"multi_match":{
"query":"A549",
"fields":["Smiles","Target Name","Category","Activity Type"]
}
}
}
```
### 多条件复合查询
```json
{
"query":{
"bool":{
"should":[ //可以是"must","must_not"
{
"match":{
"Category":"A549"
}
},{
"match":{
"Target Name":"A549"
}
},
{
"match":{
"Smiles":"A549"
}
}
]
}
}
}
```
### 成功时返回数据说明
```json
{
"took": 12, //响应所花费时间(不重要)
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": { //命中的doc数目
"total": {
"value": 10000, //检索出共10000数目(大于这个数目后面也不检索了)(不重要)
"relation": "gte" //关系:匹配条目大于或等于(greater than or equal)
},
"max_score": 2.2901592, //hits中最匹配的document的匹配值
"hits": [ //命中的documents都在这里用列表存储着
{
"_index": "link", //索引,本项目都是link
"_id": "RlveX38BwaVD80k-pd2W", //随机生成的id,除非人为指定(不重要)
"_score": 2.2901592, //匹配度
"_source": { //document,真正要展示的内容
"Category": "Anti-cancer Target",
"Target Name": "5-LOX",
"Smiles": "O=C(Cc1ccc(OCc2ccccc2)cc1)N(Cc1ccccc1)OCc1ccccc1",
"Activity Type": "Inhibition = 22.0 %",
"Detail Link": "https://www.ebi.ac.uk/chembl/compound_report_card/CHEMBL55127/"
}
},
{
"_index": "link",
"_id": "SFveX38BwaVD80k-pd2W",
"_score": 2.2901592,
"_source": {
"Category": "Anti-cancer Target",
"Target Name": "5-LOX",
"Smiles": "COc1ccc(C(=O)/C=C/c2cc3ccccc3nc2Cl)c(OC)c1",
"Activity Type": "Inhibition = 27.6 %",
"Detail Link": "https://www.ebi.ac.uk/chembl/compound_report_card/CHEMBL16869/"
}
}
]
}
}
```
## 实现功能的接口整合
基本展示
- Get 请求加上 size和from参数即可
分类加搜索
- POST 加上复合查询