PostgreSQL實在是包山包海,最近發現竟然有支援中文全文搜尋的套件PGroonga,以下簡單介紹一下。 開頭 PostgreSQL原生就有to_tsvector可以處理英文的全文搜尋,包含刪除停止詞、詞性還原等,做英文的全文搜尋很夠用了,但to_tsvector不支援中日韓等方塊字。 PGroonga支援中日韓及英文等全部語言,他是用Ngram的方式切詞,預設是切兩個字,例如「偉大的PostgreSQL」會切成: 偉大 大的 的P Po os st tg gr re eS SQ QL 並用這種方式建立索引,檢索效果不錯,10幾億字內容約1~2秒可以完成搜尋(部份視硬體設備而定),就是索引稍大,建立索引的時間約要10幾分鐘。 實做 PGroonga的使用方式,首先要先下載安裝PostgreSQL: https://www.postgresql.org/download/ 不一定要最新版,PGroonga從早期的12版到最新的17版都支援。 然後在github上找「awesome-postgres」 https://github.com/dhamaniasad/awesome-postgres 然後在「Extensions」項目中找「PGroonga」的連結並進入「install」。 PGroonga支援很多os,以windows來說,先按照安裝的PostgreSQL下載安裝檔,安裝檔是一個zip檔案,解壓縮後把檔案複製到PostgreSQL資料夾,並覆蓋舊檔便安裝成功了。 安裝完後要啟動pgAdmin,倒不一定要pgAdmin,反正就是進入可以輸入SQL語法的界面就是了。然後輸入 create extension pgroonga; 執行成功即啟動pgroonga了,接著是建立pgroonga的索引,例如 create index idx_欄位名稱 on news using pgroonga (欄位名稱); 建立索引的時間視資料量多寡而定,量多自然要等久一點。索引建立後便可搜尋,簡易的搜尋語法如下: select * from 資料表 where (建立pgroonga索引的欄位) &@~ '文字'; 可以查詢單一文字 select * from 資料表 where (建立pgroonga索引的欄位) &@| ARRAY[...
最近被網站弱點掃描的CSP問題困擾很久,CSP問題主要是兩種: 1.在CSP中允許內聯腳本執行 2.從CSP中缺少必要的指令 AppScan這兩個問題提供的處理方式都是「配置正確值的Content-Security-Policy」,等於沒說。 後來才發現AppScan無法處理多層的Content-Security-Policy,例如在httpd.conf中設定: default-src 'self' 'unsafe-inline'; 又在htaccess設定 script-src 'self'; 正常來說瀏覽器會採用htaccess的設定,即「script-src 'self';」而不是「script-src 'self' 'unsafe-inline'」,以安全性來說是符合的,但AppScan無法判斷,直接當你沒設定好CSP,解決方法只有不要重複設定,保留一項設定就好。