es 修改字段类型_elasticsearch 对数组类型的文档数据处理的三种方式

1.关联关系处理

1.应用层联接

在我们的应用程序中实现联接可以(部分)模拟关系数据库

71ee6a86a3c62e9ad64c198f746c2f92.png

执行第一个查询得到的结果将填充到 terms 过滤器中

优点:

可以对数据进行标准化处理。

缺点:

在搜索时联接文档,需要额外的查询。

该方法适用于第一个实体只有少量文档记录的情况,并且最好他们很少改变。

这将允许应用程序对结果进行缓存,并避免经常运行第一次查询。

2.非规范化你的数据

1.对每个文档保持一定数量的冗余副本可以在需要访问时避免进行关联

c376ac559df3fac2932fdf1a500f75d3.png

这部分用户的字段数据已被冗余到 blogpost 文档中

数组类型:

在同一个数组中,数组元素的数据类型是相同的,ElasticSearch不支持元素为多个数据类型:[ 10, "some string" ],常用的数组类型是:

      • 字符数组: [ "one", "two" ]
      • 整数数组: productid:[ 1, 2 ]
      • 对象(文档)数组: "user":[ { "name": "Mary", "age": 12 }, { "name": "John", "age": 10 }],ElasticSearch内部把对象数组展开为 {"user.name": ["Mary", "John"], "user.age": [12,10]}

注意:对于文档(对象)数组,每个元素都是结构相同的文档,文档之间都不是独立的,在文档数组中,不能独立于其他文档而去查询单个文档,这是因为,一个文档的内部字段之间的关联被移除,各个文档共同构成对象数组。

优点:

查询速度快,因为每个文档都包含了所需的所有信息,当这些信息需要查询匹配时,不需要进行昂贵的联接操作

缺点:

1.每个文档的 _source 将会更大,并且这里有很多的索引字段,占用的磁盘空间比较大

2.名称更改,批量更新问题

非规范化并发以及解决方式:

场景:

多人同时操作同一条数据,es对单文档支持ACIDic,对于多个文档的变更不支持ACID(事务)。

关系型数据库为主:

如果你的主要数据存储是关系数据库,并且 Elasticsearch 仅仅作为一个搜索引擎 或一种提升性能的方法,可以首先在数据库中执行变更动作,然后在完成后将这些变更复制到 Elasticsearch。 通过这种方式,你将受益于数据库 ACID 事务支持,并且在 Elasticsearch 中以正确的顺序产生变更。 并发在关系数据库中得到了处理。

es为主(不使用关系型数据库):</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值