向量数据库落地实践( 二 )


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知识文档记录'


推荐阅读