return;
}
KnBaseVecDto knBaseVecDto = buildKnBaseVecDto(new FeaVector(embeddings),flagId,chunkIndexId,str);
Map<String, Object> newPros = JsonUtil.obj2Map(knBaseVecDto);
if (MapUtils.isNotEmpty(properties)) {
newPros.putAll(properties);
}
// {"_index":"kn_base_file_db","_type":"kn_base_file_space","_id":"-8182839813441244911","status":200}
String insert = VearchUtil.insert(dbName, spaceName, null, newPros);
if (StringUtils.isBlank(insert) || !insert.contains("_index")) {
log.error("写入失败的块:{},{}", chunkIndexId, insert);
}
}
3、 数据记录
上文写知识库的过程有个 knbaseDocRecordService.writeDocRecord 的逻辑,用于记录写入的片段 。下文详细介绍其中用到的MySQL表:
1、 表1 space记录表
注:主要用于记录创建的space,以及查询管控,如禁用某个space等
CREATE TABLE `xxx_vearch_spaces` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`type` tinyint(3) NOT NULL COMMENT '类型',
`status` tinyint(3) NOT NULL COMMENT '状态',
`space` varchar(127) NOT NULL COMMENT '空间标识',
`db` varchar(127) NOT NULL COMMENT '库标识',
`desc` varchar(127) NOT NULL COMMENT '空间描述',
`ext` varchar(4095) NOT NULL DEFAULT '' COMMENT '扩展字段',
`creator` varchar(127) NOT NULL DEFAULT '' COMMENT '创建人',
`created` timestamp NOT NULL COMMENT '创建时间',
`modifier` varchar(127) NOT NULL DEFAULT '' COMMENT '修改人',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '已删除(0:否;1:是)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uniq_space_db` (`space`,`db`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='xxx向量空间'
2、 表2 file记录表
注:主要用于记录space下的file , 以及查询管控,如禁用某个file,以及关联查询对应的全部片段 。
CREATE TABLE `xxx_spaces_knbase` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`status` tinyint(3) NOT NULL COMMENT '状态',
`space` varchar(127) NOT NULL COMMENT '空间标识',
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`file_desc` varchar(511) NOT NULL COMMENT '文件描述',
`byte_num` bigint(20) unsigned NOT NULL COMMENT '字符数',
`hit_count` int(10) unsigned NOT NULL COMMENT '命中次数',
`ext` varchar(4095) NOT NULL DEFAULT '' COMMENT '扩展字段',
`creator` varchar(127) NOT NULL DEFAULT '' COMMENT '创建人',
`created` timestamp NOT NULL COMMENT '创建时间',
`modifier` varchar(127) NOT NULL DEFAULT '' COMMENT '修改人',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '已删除(0:否;1:是)',
`file_flag_id` varchar(255) DEFAULT NULL COMMENT '文件唯一标识',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_space` (`space`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='xxx空间知识库'
3、 表3 paragraph记录表
注:主要用于记录file拆分的片段 , 包括当前位置,查询命中数等 。
CREATE TABLE `xxx_knbase_doc_record` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`space` varchar(127) NOT NULL COMMENT '空间标识',
`file_flag_id` varchar(255) NOT NULL COMMENT '文件标识',
`d_index` bigint(20) unsigned NOT NULL COMMENT '文档位置',
`hit_count` int(10) unsigned NOT NULL COMMENT '命中次数',
`ext` varchar(4095) NOT NULL DEFAULT '' COMMENT '扩展字段',
`creator` varchar(127) NOT NULL DEFAULT '' COMMENT '创建人',
`created` timestamp NOT NULL COMMENT '创建时间',
`modifier` varchar(127) NOT NULL DEFAULT '' COMMENT '修改人',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '已删除(0:否;1:是)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uniq_space_file_idx` (`space`,`file_flag_id`,`d_index`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='xxx知识文档记录'
推荐阅读
- 如何正确选择NoSQL数据库
- 哈啰云原生架构落地实践
- 为什么数据库连接池不采用 IO 多路复用?
- 泰国旅游落地签要多少钱一年 泰国旅游落地签要多少钱
- 过去一年,我看到了数据库领域的十大发展趋势
- 让数据库和缓存数据保持一致的三种策略
- 无法落地的凄美爱情,多年后哈林才惊知伊能静深情
- 落地生根是什么生肖,落地生根的是什么动物
- MySQL数据库如何生成分组排序的序号
- 一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL