From b726ccae490579a2c70b171733406f0d234c5cb5 Mon Sep 17 00:00:00 2001 From: Hongwei <1223101214@qq.com> Date: Thu, 2 Dec 2021 15:50:44 +0800 Subject: [PATCH] release 0.2 --- README.md | 293 +++++++++++++++++++++++++++++++++- datanet-search-engine-backend | 2 +- datanet-search-engine-front | 2 +- 3 files changed, 294 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cf7d5d2..4ef9edf 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,15 @@ -# 项目说明 +# 数联网搜索引擎 + +## 项目说明 + 初次clone可使用以下命令。 + ```bash git clone https://xxxx/XXX-bundle.git ``` + 在git clone之后执行 + ```bash git submodule update --init @@ -14,8 +20,293 @@ git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gi ``` 更新所有子项目: + ``` git submodule foreach git pull --rebase origin master git pull --rebase origin master ``` + + +## 0.整体说明 + +![image-20211202143940500](./datanet-search-engine.png) + +数联网标准软件中包括路由器,网关,搜索引擎三个部分组成 + +如图所示,搜索引擎的代码由三部分组成,分别是Java,YJS和front。Java部分用于使用Lucene对DO的元数据进行索引以便于搜索。 + +在yjs当中使用Java当中的SearchEngine类进行索引,使用rocksDB存储元数据,并向前端提供调用的接口 + +在front当中,通过executeContract(contractName,operation,arg)接口调用合约方法获取数据 + +### 0.1searchEngine与Router的联系 + +searchEngine会在前端配置router的地址,调用router的getLRS接口获取SearchEngine自己的信息 + +### 0.2searchEngine与GateWay(Repo)的联系 + +在searchEngine看来,gateway也是一个repo,repo需要提供:getCount,getMetaByOffset,发布事件这三个接口 + +当在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接口(最小集) + +### 搜索引擎的合约当中至少对外暴露以下三个接口:addRepo,searchDo,iterRepo,其他接口非必须对外暴露 + +### 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 +``` + +### \ No newline at end of file diff --git a/datanet-search-engine-backend b/datanet-search-engine-backend index 256c94f..27e53b1 160000 --- a/datanet-search-engine-backend +++ b/datanet-search-engine-backend @@ -1 +1 @@ -Subproject commit 256c94fc75779bdcc4d9c96e53973773125fb7fd +Subproject commit 27e53b19a25dfd6aa842c360c57a686f51bc64b3 diff --git a/datanet-search-engine-front b/datanet-search-engine-front index 8fa2515..c4649b6 160000 --- a/datanet-search-engine-front +++ b/datanet-search-engine-front @@ -1 +1 @@ -Subproject commit 8fa2515508d79718e8eff7a4fd39022a137bb4ea +Subproject commit c4649b6c2a6f518d3316a0359f0811602ff7ecc6