elasticsearch社区分享会

在前段时间加班的时候错过了两场我想去的技术会,这次终于没落空了。大佬也多,涨了不少姿势。特此记录一下分享,由于全凭记忆叙述,可能就没啥顺序而言的还原出之前的收获。

确实目前项目中目前涉及到了elasticsearch不多,索引都才几个。看到别人分享的都是2千,4-5千的索引量。而且数据量大的话才更能体现出elasticsearch的作用。

周金阳 果壳网/在行 算法工程师

算法果然是大佬,让es与深度学习结合起来在搜索这块已经走在很多公司的前面了吧。

  1. 使用 ES 来构建一个简易却行之有效的个性化推荐系统,以及一些高级搜索排序的实践。
  2. 搜索排序主要是分享一些机器学习工具与 ES 配合的实践心得。

思考一个问题,如果是这样的你会选择怎么排序

1
2
3
4
{
"title":"引力波"
"content":"引力波引力波引力波"
}

1
2
3
4
{
"title":"引力波,一个世纪的求索"
"content":"在物理学中,引力波是指时空弯曲中的涟漪,通过波的形式从辐射源向外传播,这种波以引力辐射的形式传输能量。在1916年,爱因斯坦基于广义相对论预言了引力波的存在。引力波的存在是广义相对论洛伦兹不变性的结果,因为它引入了相互作用的传播速度有限的概念。相比之下,引力波不能够存在于牛顿的经典引力理论当中,因为牛顿的经典理论假设物质的相互作用传播是速度无限的。"
}

若输入的值和被检索到的结果呈线性变化g(q,x)很明显,第一个是用户测试的或者是胡乱写的,当用户输入“引力波”的时候,如何控制类似于这种情况让正常的显示在前。
这种情况,就可以加一些其他的限制条件f(x),比如1得出来的期望值为15.42,2得出来的期望值为87.93,
这样关于g(q,x) -> f(x)*g(q,x)

当然如果要做的好的话需要优化的还有很多,比如用BiLSTM+CNN 期望后期会用到这些吧,毕竟我觉得这是偏离业务而且是和大数据接轨的之一。

其中,在使用es的时候有一些规范和约束,

  • 业务索引尽量自定义id,数据敏感业务自备插入修改时间
  • 一个索引一个type
  • 控制单次搜索结果条数,总条数由es限制。控制请求超时时间

关于es的使用也有在调用链日志

  • 一个节点一个主分片,0副本,
  • 批量写入,控制单批写入字节数

在生产阶段,调用链日志写入慢,kafka会出现大量堆积等现象,关于如何解决。有以下方案,

  1. 索引写入时会伴随着id校验,请求体解析,分词等操作,都会带来一定的cpu开销。原先的索引结构中存在部分多余字段,无需进行分词,取消后可以减轻cpu压力。
  2. 使用es自动生成id,省去id检查步骤。调整translog合并时间,半小时一次,防止过多merge任务导致cpu开销过大。

在业务索引随着场景变化,写入量逐渐增多,集群cpu load变高,原来单个主分片写入出现瓶颈
遇到这种情况 可以重建索引,主分片改为2个,分别分布在两台机器,达到负载均衡效果,数据需要迁移。

在提及到es时,不得不说也是和spark相关。这里就不展开讲了,下次深入了解的时候再学习。

番外

大公司都是搜索是一个团队,虽然我业务写的也不好,但是我更倾向于这种方向。分享者都很强,有开发相关的以及运维,技术演变快,找准自己的一个兴趣点,专研下去。

分享到 评论