ES版本选择:1.6.0(当时的最新版本)html
系统部署:web
- 该引擎以webservice的形式对外提供服务,与web系统隔离
- 如何限制访问数量
- 引擎线程池限制同时查询数量,拒绝超量(抛异常,捕获到返回查询等待)
系统限制:正则表达式
- 服务真正使用系统的用户(客户要求),
- 查询条件大于6个字
- 系统限制检索结果大于1000的结果进行缓存
- 历史页面再次查询时,大于1000的必须优化查询条件
系统分为三部分:数据库
数据预处理:缓存
首先数据是从国家知识产权局购买的原始数据,根据申请号分红若干级的文件夹,申请号文件夹下数据内容由xml文件、pdf、图片等文件组成多线程
- 检索数据预处理
- 检索数据包括:
- 专利名称、摘要、权利要求、说明书、法律状态
- 申请日期、公开日期、受权日期
- 申请号、公开号、受权号
- 分类号(外观分类、国际分类)
- 申请人、当前专利人、发明人、代理人、代理机构
- 申请人地址
- 将上述字段预存入ES中,创建索引
- 注意:
- 文本类分词建索引(IK分词)
- 编号类完整建索引
- 人名称按照逗号分隔建索引
- 分析数据预处理
- 分析数据包括:
- 申请日期、公开日期、受权日期
- 法律状态
- 分类号(外观分类、国际分类)
- 申请人、当前专利人、发明人、代理人、代理机构
- 申请人省市编号
- 将上述数据预存入Redis中(检索结果大于1000的不予分析)
检索系统:优化
检索系统分为索引创建和搜索两部分spa
- 索引创建
- 创建索引须要注意:有的字段须要分词、有的不须要、有的须要特定字符串分词(好比:多个发明人是逗号隔开的)
- "index":"not_analyzed", //analyzed:编入索引供搜索、no:不编入索引、not_analyzed(string专有):不经分析编入索引
- 好比每一个字段选择一个分词器

- "boost":"1", //文档中该字段的重要性,值越大表示越重要,默认1
快速查询和高级查询(二次检索,就是将第二次检索条件拼接第一次检索条件).net
- 快速查询:全部字段全匹配
- 高级查询:部分字段匹配
- http://www.javashuo.com/article/p-djimftpo-cr.html
- ES的搜索功能强大:
- 倒排索引的缘故(跟数据库最大的区别);
- 支持前模糊、后模糊,通配符查询、正则表达式查询、聚合查询、排序、范围查询等功能;
- 支持词条查询和全文查询:
- 全文查询首先分析(Analyze)查询字符串,使用默认的分析器分解成一系列的分词
- 词条查询是字符的彻底匹配
- match查询经常使用的参数
- operator:用来控制match查询匹配词条的逻辑条件,默认值是or,若是设置为and,表示查询知足全部条件;
- minimum_should_match:当operator参数设置为or时,
- 短语匹配查询
- 必须匹配短语中的全部分词
- 而且保证各个分词的相对位置不变
- 布尔查询
- must子句:文档必须匹配must查询条件;
- should子句:文档应该匹配should子句查询的一个或多个;
- must_not子句:文档不能匹配该查询条件;
- filter子句:过滤器,文档必须匹配该过滤条件,跟must子句的惟一区别是,filter不影响查询的score;
- 过滤上下文
- 时间(范围过滤)、状态字段使用

分析系统:线程
- 生成20+张报表,多线程实现
- 尽管ES 也有聚合查询,排序等功能,这里考虑Es核心功能,以及处理效率,以及报表复杂度和数量较多,采用Redis,多线程本身计算