某专利检索分析系统设计回顾

ES版本选择:1.6.0(当时的最新版本)html

系统部署:web

  • 该引擎以webservice的形式对外提供服务,与web系统隔离
  • 如何限制访问数量
    • 引擎线程池限制同时查询数量,拒绝超量(抛异常,捕获到返回查询等待)

系统限制:正则表达式

  • 服务真正使用系统的用户(客户要求),
    • 查询条件大于6个字
    • 系统限制检索结果大于1000的结果进行缓存
    • 历史页面再次查询时,大于1000的必须优化查询条件

系统分为三部分:数据库

  • 数据预处理
  • 检索系统
    • 历史缓存
  • 分析系统

数据预处理:缓存

首先数据是从国家知识产权局购买的原始数据,根据申请号分红若干级的文件夹,申请号文件夹下数据内容由xml文件、pdf、图片等文件组成多线程

  • 检索数据预处理
    • 检索数据包括:
      • 专利名称、摘要、权利要求、说明书、法律状态
      • 申请日期、公开日期、受权日期
      • 申请号、公开号、受权号
      • 分类号(外观分类、国际分类)
      • 申请人、当前专利人、发明人、代理人、代理机构
      • 申请人地址
    • 将上述字段预存入ES中,创建索引
      • 注意:
        • 文本类分词建索引(IK分词)
        • 编号类完整建索引
        • 人名称按照逗号分隔建索引
  • 分析数据预处理
    • 分析数据包括:
      • 申请日期、公开日期、受权日期
      • 法律状态
      • 分类号(外观分类、国际分类)
      • 申请人、当前专利人、发明人、代理人、代理机构
      • 申请人省市编号
    • 将上述数据预存入Redis中(检索结果大于1000的不予分析)
      • 申请号为key,hash类型存储

检索系统:优化

检索系统分为索引创建搜索两部分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,多线程本身计算
相关文章
相关标签/搜索