最近公司 CRM中台系统新接入一个demand,用户画像? pm一顿介绍,才知道是类似于给用户贴行为标签。
功能类似淘宝的不同用户推荐不同商品 根据用户的行为特征分析出用户的商品需求 包括分析出用户的真实性别 、真实年龄、 家庭人数 ...等等 其实也就是大数据的常用场景
那大数据就好说呀 Hadoop Spark接入就ok,领导善意提醒公司服务器资源不多,用户量并非很多 20万左右 大数据框架是搞不起的 只能另想它法,但是20万用户 根据用户标签算法 轻轻松数据量也达到上千万 上亿 还需要实时查询 正常的数据库 根本不可能,最后公司新请的一位资深多年的架构师 提出了Elasticsearch解决方案,既不需要大量的服务器资源 又可以处理上亿的数据 leader觉得ok 开始学习Elasticsearch 解决需求
随后自己私下学习 了解到 Elasticsearch强大的之处: 基于多年经验的Lucene作为搜索引擎 以及极度优化的索引功能 更主要的是操作简易的优化型 我自身是用的Java配置的Elasticsearch 配置简单 maven引入jar包 创建连接 代码创建索引上传文档即可 操作简易型类似于Redis
上句话的上传文档大家可能多数都不懂 Elasticsearch是存储文档的吗?嗯哼 其实它就是面向文档型数据库 不过类似MongoDB 是存储文档序列化后的Json字符串
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
这是一个用户信息的json化 我们可以执行以下命令将数据存储到Elasticsearch中
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
接下来我们可以通过
GET /megacorp/employee/1
获取到我们存储在Elasticsearch中的数据
{
"_index" : "megacorp",
"_type" : "employee",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
}
其中的_source我们可以看到就是我们要存储的数据 不过额外多了很多其他属性 我会一一介绍
_index是索引名字 是我们创建数据到Elasticsearch自己定义的名称 小白可以理解为我们电脑的数据盘名称 比如 c盘 d盘。。
_type 也是我们自定义的 它就类似于一个文件夹名称
_id 也是自定义的哈哈 但一般用来记录第几条数据 类似于数据的自增id
_version就是版本咯 每次修改数据会自增
found 是否可查询
初始操作是非常简单 的
大家看完这个不要觉得这就是个简单nosql 我只是带大家初始的过一下 之后还有很多种操作需要了解 以及对自身业务嵌入型的调解 深入的学习非常复杂 还有各种问题 后续我都会更新 come codeBoy