某專利檢索分析系統設計回顧

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,多線程本身計算
相關文章
相關標籤/搜索