注册表版本
Go to file
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

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

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

{"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