目标:
- 业务与当前业务系统分离
- 支持多实例部署(分布式)
- 与业务系统切合简单
- 开发人员配置简单,改动代码较少
- 支持搜索统计
- 索引管理
架构图:
流程说明:
采用lucene进行全文搜索要进行两个步骤,一个是建索引,二是搜索索引。
1. 建索引
1.1 确定索引的实体(model)种类,在每个实体上加上@IndexEntity的注解,标记该类被索引
1.2 按需对实体要索引的字段进行“索引域配置”,如是否分词、域的数据类型、域在索引中的名称,采用@IndexField注解配置
1.3 收集数据;对每个注解了@IndexEntity的实体进行反射,获取“索引域”的信息,保存到一个集合中,搜索系统定时通过websevice去“API服务系统”获取要索引的数据(JSON格式)
1.4 建索引;搜索系统获取到索引的数据后,解析JSON, 采用Lucene进行建索引, 索引完成后把索引成功的实体列表以JSON形式返回”API服务系统“。
1.5 API服务系统把索引成功的实体标记为“已经索引”,索引工作完成. 搜索
2. 搜索
2.1 业务系统提供搜索类型、域、域是否分词、页数等参数通过HTTP的形式请求搜索系统查询结果
2.2 搜索系统根据请求参数解析并进行Lucene的搜索
2.3 搜索系统根据搜索的结果把实体的ID和类型封装在集合中,以JSON形式返回给业务系统
2.4 业务系统根据搜索结果把数据展示出来。
BTW:
- API服务系统不是必须的,这里独立是为了分担业务系统处理请求的压力
- 搜索系统访问API服务器需要有AppKey, 类似api 的 secretKey
- API服务系统访问搜索系统要带上当前时间的签名,签名的密钥由搜索系统给出。