【阿里云opensearch】如何在opensearch配置一对多的数据结构

阿里云的opensearch服务本身是只支持主表N对1的结构,但是并不支持1对N的结构。换而言之就是多条主表记录可以对应单条辅表记录,但是如果一条主表记录对应多条主表记录就会出问题。比如多个商品可以对应同一个品牌,那么我们就必须用商品来做主表,而不能用品牌来做主表。如果一条物品有进仓和出仓两条记录,我们是不能用进出仓记录来做附表的,但如果此时又有这样的需求,那么我们应该怎么办呢?

在我们的工作中就遇到了这样的场景,一个人对应多条认证记录,但是对于我们来说,又确实不能拿认证记录来做为主表,但是我们有需要在opensearch里根据认证记录的种类进行搜索的场景,这个时候又应该怎么办呢?

阿里云的opensearch虽然对主表1对N是不支持的,但是如果你的搜索结果是1对多的那多条记录字段的值都一样,那就没有问题。

比如在我们的场景中假设一个人的A认证我们记录的type为A,且有多条不同的A认证记录,B认证和C认证和A认证一样。

这个时候我们新建一个附表,只用来判断A字段,关联个人的id,字段设为isA,对应认证标的type字段,过滤条件为type='A'.

同样的再新建一个附表,只用来判断B字段,同样关联个人id,字段设为isB,对应认证标的type字段,过滤条件为type='B'.

同样的再新建一个附表,只用来判断C字段,关联个人id,字段设为isC,对应认证标的type字段,过滤条件为type='C'.

也就是我们为了关联type的3种值的记录,创建了3张附表,这三张附表的数据源都是同一张数据库表,甚至连字段都是同一个,但是用不同的过滤条件对他们进行筛选。

这样的设置是不会有问题的,哪怕一个人有多条A认证记录,但是因为我们只取的是type字段,并且进行筛选,所以type的值都是A,没有多个不同的值,这样似乎是没有问题的(经过我测试)。

然后我们定义一个索引,包含isA,isB, isC的三个字段,把这个索引重新命名为type,可以用type:'A'或者type:'B'来直接做搜索。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值