到目前为止,我遇到的ES的使用场景有以下:
- 配合分词器做全文搜索引擎。这应该也是ES的本职工作吧。
- 在ELK中扮演数据仓库的角色。ELK也是日志处理收集、分析、告警推送的通用解决方案,在每个公司都有。
- 借助ES实现超级索引,提高DB中超大数据量的检索效率。
全文搜索引擎
在DB数据库中,如果要在varchar或者text或者json类型的字段中 like “%要搜索的词%”,
索引会失效,索引很容易想到用ES来做全文搜索,常见在电商前台搜索框中。
常见的做法
- 在保存db行数据的事务中双写。但是不推荐手动双写,这就引起了另一个话题:db和cache双写一致性的问题。回头再整理。
- 使用LogStash把db数据库中的数据收集到ES中,ELK就是这样操作的。
ELK中的应用。
每个公司的运维同学都会搞。
有个小操作:使用索引模板控制动态映射的字段属性。
借助ES实现超级索引。
最近有个需求,年底公司在做数据大盘,需要整理每个订单的计提奖励数据,公司的订单表是按照周来分片的,大概每天产出500w条订单,要回溯最近一年的订单支出,而且还要联表四五张,绝壁慢查询了o(╥﹏╥)o,最痛苦的是我们有几个查询条件是在varchar字段中,肯定要做like查询,这时候索引就失效了。
做法:把不能加索引的列和主键灌进ES中,去ES中like查询出主键, 在进行in操作,也就是把es当做 一个超级索引插件。
这样做的问题还是得保证ES中的数据跟DB中的数据是一致的,不过还在订单是固化的数据,今后不再变动,保证一致性也比较简单。