标签体系改造
标签体系ES存储方案(es v5)
设置分词器
1 | { |
index
每个treeType为一个index,名称为trident_es_{treeTypeId}
type
info
对应打标签对象的物料表
label
存储标签
info和label为父子文档
schema
info
和物料表字段类型保持一致,string类型的都为keyword
label
label中有多个properties,设置索引模板
每个标签树对应三个字段:tree_{treeId}_label,tree_{treeId}_label_expire_time,tree_{treeId}_label_update_time,每个字段设置类型为text,设置分词器为\|
字段中存储多个标签,每个标签用|分割
1 | { |
涉及改动
写入
原整体写入流程
- 根据标签规则设置,生成相应的打标签sql(基于hive)
- 将标签结果写入到hive中的all_temp_tag里(竖表,分区表)
1 | CREATE TABLE db_datastory_trident.all_temp_tags( |
- 将结果竖表转成横表,刷到hbase和es中
1 | ## hbase_label_{treeTypeId}_temp_{labelId} |
改动后的写入流程
- 根据标签规则设置,生成相应的打标签sql(基于hive) ==> 不变
- 将标签结果写入到hive中的all_temp_tag里(竖表,分区表) ==> 分区增加tree
1 | CREATE TABLE db_datastory_trident.all_temp_tags( |
- 将结果竖表转成横表,刷到hbase和es中 ==> 修改逻辑,将多字段拼接成字符串
跑单个标签时,也走这种逻辑,性能问题?
1 | ## hbase_label_{treeTypeId}_{treeId}_temp |
强制要求标签名中不能有“|”
merge相关
修改
原
改后
删除
原
改后
查询
原
改后
人群包
修改相应的查询,仍然是has_child+query,query中采用bool+match的形式
涉及到标签过期的话,采用script?
待确认
- leo表达式是否支持转换es的match请求 ==> 支持 详见Leo表达式汇总文档
1 | { |
- 更新时的性能问题
更新某个标签时,因为是字符串,所以不能直接update,需要用script的方式去更新。将值取出来,split,找到对应的标签,update取值
数组方案宣告失败。参考官网说明
方案2 数组
1 | PUT test2/label_default/19b2a580d86946a7b886ac2e79b581f2/_create |
方案三 nested
1 |
评论
评论插件加载失败
正在加载评论插件