datanet-hierarchy-register-.../README.md
2021-12-02 15:50:44 +08:00

312 lines
6.3 KiB
Markdown
Raw 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.

# 数联网搜索引擎
## 项目说明
初次clone可使用以下命令。
```bash
git clone https://xxxx/XXX-bundle.git
```
在git clone之后执行
```bash
git submodule update --init
```
```bash
git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
```
更新所有子项目:
```
git submodule foreach git pull --rebase origin master
git pull --rebase origin master
```
## 0.整体说明
![image-20211202143940500](./datanet-search-engine.png)
数联网标准软件中包括路由器,网关,搜索引擎三个部分组成
如图所示搜索引擎的代码由三部分组成分别是JavaYJS和front。Java部分用于使用Lucene对DO的元数据进行索引以便于搜索。
在yjs当中使用Java当中的SearchEngine类进行索引使用rocksDB存储元数据并向前端提供调用的接口
在front当中通过executeContractcontractName,operation,arg接口调用合约方法获取数据
### 0.1searchEngine与Router的联系
searchEngine会在前端配置router的地址调用router的getLRS接口获取SearchEngine自己的信息
### 0.2searchEngine与GateWayRepo的联系
在searchEngine看来gateway也是一个reporepo需要提供getCountgetMetaByOffset发布事件这三个接口
当在searchEngine当中添加一个Repo的时候searchEngine调用对应的Repo的getCount获取Repo当中的DO数量然后调用getMetaByOffset获取Repo当中的当前所有DO的元数据然后订阅该Repo的事件等到有新的更新再次通过getMetaByOffset获取
## 1.项目配置
### 1.1项目路径:
- datanet-search-engine-bundle
- datanet-search-engine-backend
- build //构建完成后生成
- ...
- output //部署的全部内容ypk里面的全部内容
- assets //静态资源文件(编译好的前端)
- libs //项目中java部分的依赖
- DAC.yjs //用户访问控制部分目前只使用了owner
- manifest.json
- mockConfig.json //模拟数据使用
- SearchEngine.jar
- SearchEngine.yjs //智能合约主体部分
- ...
- buildlibs
- cplib
- src
- main
- test
- yjs
- DAC.yjs //用户访问控制部分目前只使用了owner
- manifest.json
- mockConfig.json //模拟数据使用
- SearchEngine.yjs //智能合约主体部分
- ...
- datanet-search-engine-front
- dist //编译好的前端代码
- sdk-javascript //合约引擎的sdk改成将sdk作为子项目引入比较好
- src //前端代码部分
- ...
### 1.2配置
```
//当前路径datanet-search-engine-bundle
cd datanet-search-engine-front
//编译sdk
cd sdk-javascript
npm i
npm run build
cd ..
//编译前端项目
npm i
npm run build
//得到dist
执行backend当中的buildYPK在*backend/build当中得到SearchEngine.ypk
将YPK部署到合约引擎上并且运行
然后使用链接http://ip:port/DOIP/SearchEngine/assets/即可访问
例如http://023.node.internetapi.cn:21130/SearchEngine/assets/
```
## 2.YJS接口(最小集)
### 搜索引擎的合约当中至少对外暴露以下三个接口addReposearchDoiterRepo其他接口非必须对外暴露
### 2.1addRepo
向搜索引擎中添加一个Repo具体执行过程为
1. 在合约引擎的db当中保存repo元信息更新repo数量
2. 调用repo的getCount接口获取repo当中的全部DO数量
3. 调取repo的getMetaByOffset接口count为getCount返回值offset为0得到这些DO的全部信息
4. 搜索引擎索引这些DO的元信息,并记录在数据库当中更新DO数量和更新次数
5. 订阅Repo的更新事件一旦Repo有更新就获取更新的DO内容
参数一个JSON对象,至少包括repoid和repoName其他可选
```json
{"repoid":"86.139.36/repo1","repoName":"repo1"}
```
返回结果:
```json
"done"
```
### 2.2searchDo
参数一个JSON对象,至少包括type要搜索的字段和keyword搜索关键字
count和offset是可选项如果没有的话取默认值
```json
{"type":"doid","keyword":"86.139.28/abc"}
{"type":"doid","keyword":"86.139.28/abc","count":10,"offset":"0"}
```
### 2.3 iterRepo
遍历所有repo返回一个repo数组
参数:无
返回:
```json
[{"repoid":"xxx","repoName":"xxx"},{"repoid":"xxx","repoName":"xxx"}]
```
### 2.4addDo
添加并按照所有字段索引一个DO的元信息
参数一个JSON对象,至少包括doid其他可选
```json
{"doid":"86.139.36/repo1/1"}
```
###
### 2.5deleteDo
添加并按照所有字段索引一个DO的元信息
参数一个字符串内容是doid
```json
"86.139.36/repo1/1"
```
### 2.6 iterDo
遍历所有do返回一个do数组
参数:无
返回:
```json
[{"doid":"xxx","name":"xxx"},{"doid":"xxx","name":"xxx"}]
```
### 2.7 getRepoCount
返回Repo数量
参数:无
返回结果:
```json
5
```
### 2.8getDoCount
返回DO数量
参数:无
返回结果:
```json
5
```
### 2.9getUpdateCount
返回更新次数
参数:无
返回结果:
```json
5
```
### 2.10getSearchCount
返回搜索次数
参数:无
返回结果:
```json
5
```
### 2.11getUserCount
返回用户数量
参数:无
返回结果:
```json
5
```
### 2.12updateRepoHandler
更新事件的回调当订阅的Repo有更新是会调用执行的内容是
收到通知的count和offset然后去调用对应Repo的getMetaByOffset接口获取更新后的DO
### 2.13getinfo
前端获取自身信息
### 2.14setinfo
从Router获取到自身的数据后保存下来
## 3.Java接口
### 3.1createObj(String Dirname)
返回一个SearchEngine对象用于后续使用参数Dirname用于创建索引文件夹
### 3.2update(ScriptObjectMirror so)
更新或者添加一个DO的索引文档
### 3.3search(ScriptObjectMirror so)
根据关键字检索
### 3.4delete(ScriptObjectMirror so)
在索引中删除一个DO的文档
## 4.front
先进到sdk-javascript当中build
```
cd datanet-search-engine-front/sdk-javascript
npm i
npm run build
cd..//然后退回本级
npm i
npm run dev
npm build
npm run serve
```
###