Elasticsearch 在企业协作服务中的应用实践

展开查看详情

1.Elasticsearch 在企业协 作服务中的应⽤用实践

2.我是谁 Who am I ?

3.• 宓⽂文捷 • github.com/orangemi • weixin: orangemi • ⼀一个喜欢研究各种技术的⾕谷粉

4.我来⾃自哪⾥里里 Where do I come from ?

5.• https://www.teambition.com • 团队协作⼯工具创导者 • Teambition 是⼀一个简单,⾼高效的项⽬目协作⼯工具,你可以在 这⾥里里管理理项⽬目,跟踪任务进度,存储项⽬目⽂文件,让你的团 队协作更更⾼高效 • 2015年年 被苹果公司评为年年度最佳应⽤用

6.⽤用户情景

7. 搜索机票 • 数据:机票数据 • 条件:航班,起⻜飞降落,时间范围,价格范围,国内/国际 • 排序:时间,价格,航空公司 • 聚合:⽆无

8. 搜索⽂文献 • 数据:⽂文献数据 • 条件:包含⽂文字,作者 • 排序:相关度,偶尔有时间, 作者 • 聚合:作者,标签

9. 业务价值&产品需求 • ⼤大海海捞针,获得洞洞察 • 易易⽤用的任务筛选需求、降低任务管理理维护成本 • 精细的任务导出需求,低成本关注成员进展 • 跨项⽬目任务汇总需求,商业报告应⽤用⽀支撑

10. 搜索任务 • 数据:任务 • 条件:包含⽂文字,截⽌止时间,参与⼈人员,评论内容,⾃自定 义字段(时间字段,⽂文本字段,数字字段) • 排序:相关度,时间,数字字段,⾃自定义字段 • 聚合:按时间维度,按数字范围,按⼈人员,按⾃自定义字段

11.什什么是任务 固定字段: ⼈人员,时间,⽂文本 ⾃自定义字段: ⽂文本,选项,时间,数字 隐藏字段:权限 评论动态

12. 筛选条件 按照⾃自定义字段搜索 固定字段搜索条件 时间字段过滤器器 可能有⽂文本,数字,⽇日期

13. 问题 Problems 梳理理产品需求,把握需求难点

14. 权限 Privileges • 不不可以访问的任务 • 可以访问的任务 • 管理理员 • (允许⽤用户建⽴立⾃自⼰己的权限模型) • 权限模型变化的数据结构不不太容易易处理理

15. Schemaless Database • Teambition的搜索 = 固定字段 + ⾃自定义字段。 • ⽤用户在任务管理理系统⾥里里创建的内容⼏几乎是⽆无规则的

16. 数据量量 • > 80M Documents • > 10k Fields

17. 解决⽅方案 Solutions 梳理理产品需求,把握需求难点,难点转化操作

18.(存哪⾥里里) 存什什么 怎么存 怎么查

19.• Elasticsearch是⼀一个⾼高度可扩展开源全⽂文搜索和分析引擎, 它允许⽤用户快速,实时地存储,搜索和分析⼤大量量数据。 • ES通常⽤用作为具有复杂的搜索功能和要求的应⽤用程序提供 的底层引擎/技术。

20.数据模型 Model

21.固定字段

22. ⾃自定义字段 fid string date keyword number 1 abc 2 ae29c 3 2017-05-04 4 10.4 • Nested Object • 不不同类型分别存 • 性能问题?

23. 权限模型 User / Role Resource • ⽤用户持钥匙 • 资源带有锁 • 任意把对上 • 就是有权限

24.数据同步 Data Streaming

25. Event Sourcing • Command and Query Responsibility Segregation • 根据事件,获取数据当前状态(扩展字段) • 保证最终⼀一致性 • Kafka / RabbitMQ • binlog / oplog

26.查询 Query

27. TQL的建⽴立 • Teambition Query Language • SQL / JQL / Elasticsearch SQL • 简化 和 优化 • 开发喜欢,甚⾄至直接给⽤用户

28. 看⼀一些例例⼦子 • dueDate < 7d • dueDate < 7d AND executorId = currentUser() • cf:阶段 IN (TODO, DOING) • text ~ 关键词 • GROUP SUM(storyPoint) BY executorId

29. TQL的组成 text ~ 搜索 AND executorId = currentUser() Field Value Logic Operation • 条件表达式 [conditionExpr] • 聚合表达式 [groupExpr],排序表达式 [orderExpr] • https://orangemi.github.io/teambition-tql/tql.html