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,多線程本身計算