# datanet-search-engine-bundle **Repository Path**: BDWare/datanet-search-engine-bundle ## Basic Information - **Project Name**: datanet-search-engine-bundle - **Description**: 数联网注册表 支持同步并索引数字对象仓库中的元数据 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 5 - **Created**: 2021-10-26 - **Last Updated**: 2025-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数联网注册表系统 数字对象注册表(Search Engine),是BDWare数联网基础设施的其中一个子系统, 负责管理数字对象的元数据,并基于元数据提供数字对象的搜索、发现服务。 系统架构如图所示 ![](https://gitee.com/BDWare/BDWare/raw/master/_static/imgs/RegistryArch.png) 注册表系统的代码由三部分组成,分别是Java后端,前端以及YJS。Java部分用于使用Lucene对DO的元数据进行索引以便于搜索。 在yjs当中使用Java当中的SearchEngine类进行索引,使用rocksDB存储元数据,并向前端提供管理接口。 在front当中,通过executeContract(contractName,operation,arg)接口调用YJS管理接口来访问数据 ### searchEngine与Router的联系 searchEngine会在前端配置router的地址,调用router的getLRS接口获取SearchEngine自己的信息 ### searchEngine与GateWay(Repo)的联系 在searchEngine看来,gateway也是一个repo,repo需要提供:getCount,getMetaByOffset,发布事件这三个接口 当在searchEngine当中添加一个Repo的时候,searchEngine调用对应的Repo的getCount获取Repo当中的DO数量,然后调用getMetaByOffset获取Repo当中的当前所有DO的元数据,然后订阅该Repo的事件(等到有新的更新,再次通过getMetaByOffset获取) ## 项目说明 初次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 ``` ## 项目配置 ### 项目路径: - datanet-search-engine-bundle - datanet-search-engine-backend - build //构建完成后生成 - ... - output //部署的全部内容(ypk里面的全部内容) - assets //静态资源文件(编译好的前端) - libs //项目中java部分的依赖 - DAC.yjs //用户访问控制部分,目前只使用了owner - manifest.json - mockConfig.json //模拟数据使用 - SearchEngine.jar - Registry.yjs //智能合约主体部分 - ... - buildlibs - cplib - src - main - test - yjs - DAC.yjs //用户访问控制部分,目前只使用了owner - manifest.json - mockConfig.json //模拟数据使用 - Registry.yjs //智能合约主体部分 - ... - datanet-search-engine-front - dist //编译好的前端代码 - sdk-javascript //合约引擎的sdk,改成将sdk作为子项目引入比较好 - src //前端代码部分 - ... ### 配置 ```shell # 当前路径: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/ ## 注册表管理接口 YJS接口(最小集) 注册表的合约当中至少对外暴露以下三个接口:addRepo,searchDo,iterRepo,其他接口非必须对外暴露 ### addRepo 向注册表中添加一个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" ``` ### searchDo 参数:一个JSON对象,至少包括type(要搜索的字段)和keyword(搜索关键字) count和offset是可选项,如果没有的话取默认值 ```json { "type": "doid", "keyword": "86.139.28/abc" } ``` ```json { "type": "doid", "keyword": "86.139.28/abc", "count": 10, "offset": "0" } ``` ### iterRepo 遍历所有repo返回一个repo数组 参数:无 返回: ```json [ { "repoid": "xxx", "repoName": "xxx" }, { "repoid": "xxx", "repoName": "xxx" } ] ``` ### addDo 添加并按照所有字段索引一个DO的元信息 参数:一个JSON对象,至少包括doid,其他可选 ```json { "doid": "86.139.36/repo1/1" } ``` ### deleteDo 添加并按照所有字段索引一个DO的元信息 参数:一个字符串,内容是doid ```json "86.139.36/repo1/1" ``` ### iterDo 遍历所有do,返回一个do数组 参数:无 返回: ```json [ { "doid": "xxx", "name": "xxx" }, { "doid": "xxx", "name": "xxx" } ] ``` ### getRepoCount 返回Repo数量 参数:无 返回结果: ```json 5 ``` ### getDoCount 返回DO数量 参数:无 返回结果: ```json 5 ``` ### getUpdateCount 返回更新次数 参数:无 返回结果: ```json 5 ``` ### getSearchCount 返回搜索次数 参数:无 返回结果: ```json 5 ``` ### getUserCount 返回用户数量 参数:无 返回结果: ```json 5 ``` ### updateRepoHandler 更新事件的回调,当订阅的Repo有更新是会调用,执行的内容是: 收到通知的count和offset,然后去调用对应Repo的getMetaByOffset接口,获取更新后的DO ### getinfo 前端获取自身信息 ### setinfo 从Router获取到自身的数据后保存下来 ## Java接口 ### createObj(String Dirname) 返回一个SearchEngine对象,用于后续使用,参数Dirname用于创建索引文件夹 ### update(ScriptObjectMirror so) 更新或者添加一个DO的索引文档 ### search(ScriptObjectMirror so) 根据关键字检索 ### delete(ScriptObjectMirror so) 在索引中删除一个DO的文档 ## 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 ``` ## 更多文档 [部署文档](https://gitee.com/BDWare/iod-docker-deploy/blob/master/README.md) 启动参数、开发指南,详见:[开发者文档](https://gitee.com/BDWare/datanet-search-engine-backend/blob/master/README.md) ## 依赖库 | 名称 | Licence类型 | 说明 | |----------------------------------------------------------------------------------------------|-------------------------------------------------------------------|--------------| | [log4j2-core](https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.17.2) | [ApacheV2](https://www.apache.org/licenses/) | 日志库 | | [log4j2-api](https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.17.2) | [ApacheV2](https://www.apache.org/licenses/) | 日志库 | | [mysql-connector-java](https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.27) | [GPL 2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) | 数据库jdbc连接 | | [doip-audit-tool](https://mvnrepository.com/artifact/org.bdware.doip/doip-audit-tool/1.0.8) | [Mulan PSL 2.0](http://license.coscl.org.cn/MulanPSL2) | doip协议sdk | | [sdk-java](https://mvnrepository.com/artifact/org.bdware.bdcontract/sdk-java/1.0.2) | [Mulan PSL 2.0](http://license.coscl.org.cn/MulanPSL2) | 数瑞分布式执行环境sdk | | [cp](https://mvnrepository.com/artifact/org.bdware.sc/cp/1.6.8) | [Mulan PSL 2.0](http://license.coscl.org.cn/MulanPSL2) | 数瑞分布式执行环境 | | [lucene](https://mvnrepository.com/artifact/org.apache.lucene/lucene-backward-codecs) | [ApacheV2](https://www.apache.org/licenses/) | 倒排索引实现 |