注册表版本
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2022-04-12 13:28:27 +08:00
datanet-register-backend@e89191d2ce first commit 2022-04-12 13:28:27 +08:00
datanet-register-front@fc8751e2d8 fork register 2022-04-12 13:27:42 +08:00
datanet-search-engine-backend@a18f7ac3cb release 0.3 2022-04-01 11:16:27 +08:00
datanet-search-engine-front@7b109c7845 release 0.3 2022-04-01 11:16:27 +08:00
.gitignore update readme 2021-11-06 10:11:35 +08:00
.gitmodules fork register 2022-04-12 13:27:42 +08:00
build.gradle fork register 2022-04-12 13:27:42 +08:00
datanet-search-engine.png release 0.2 2021-12-02 15:51:14 +08:00
LICENSE Initial commit 2021-10-26 01:05:02 +00:00
README.md release 0.2 2021-12-02 15:50:44 +08:00
settings.gradle fork register 2022-04-12 13:27:42 +08:00

数联网搜索引擎

项目说明

初次clone可使用以下命令。

git clone  https://xxxx/XXX-bundle.git

在git clone之后执行

git submodule update --init

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

数联网标准软件中包括路由器,网关,搜索引擎三个部分组成

如图所示,搜索引擎的代码由三部分组成,分别是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,其他可选

{"repoid":"86.139.36/repo1","repoName":"repo1"}

返回结果:

"done"

2.2searchDo

参数:一个JSON对象,至少包括type(要搜索的字段)和keyword(搜索关键字)

count和offset是可选项,如果没有的话取默认值

{"type":"doid","keyword":"86.139.28/abc"}
{"type":"doid","keyword":"86.139.28/abc","count":10,"offset":"0"}

2.3 iterRepo

遍历所有repo返回一个repo数组

参数:无

返回:

[{"repoid":"xxx","repoName":"xxx"},{"repoid":"xxx","repoName":"xxx"}]

2.4addDo

添加并按照所有字段索引一个DO的元信息

参数:一个JSON对象,至少包括doid,其他可选

{"doid":"86.139.36/repo1/1"}

2.5deleteDo

添加并按照所有字段索引一个DO的元信息

参数:一个字符串,内容是doid

"86.139.36/repo1/1"

2.6 iterDo

遍历所有do,返回一个do数组

参数:无

返回:

[{"doid":"xxx","name":"xxx"},{"doid":"xxx","name":"xxx"}]

2.7 getRepoCount

返回Repo数量

参数:无

返回结果:

5

2.8getDoCount

返回DO数量

参数:无

返回结果:

5

2.9getUpdateCount

返回更新次数

参数:无

返回结果:

5

2.10getSearchCount

返回搜索次数

参数:无

返回结果:

5

2.11getUserCount

返回用户数量

参数:无

返回结果:

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