xapian 搜尋引擎之 CJK 支援

作者:   發佈於:   #software

xapianmunotmuchsup 等 Email User Agent 所使用的搜尋引擎。雖然其搜尋機能有妥善支援各種西文,但對於漢字、注音、假名等 CJK 字符的處理一直並不理想。如果什麼都不調整的話,基本上分詞規則是以空白切開,沒有 ngram。而這對於漢字內容顯然是沒什麼用。

最近發現 XAPIAN_CJK_NGRAM 這個環境變數的存在而試用了一下。這環境變數會直接影響 xapian 本身,不必再額外修改 mu 的設定。

export XAPIAN_CJK_NGRAM=1
mu init
mu index

簡單試了一下後發現這變數能讓 xapian 生成漢字 1-gram 與 bigram。依 xapian-ticket-180 這票的紀錄看來,其之出現是在 2015 年的 xapian 1.2.2 版,而其 CJK 分詞實作則是直接採用 xern 所做的 cjk-tokenizer

而依照其測試 xapian-cjk-tests 看來,至少有涵蓋到漢字、韓文、片假名,以及西漢混合使用的狀況。西文的部分不會有 bigram 生成出來。所涵蓋的字符範圍定義在程式碼 queryparser/cjk-tokenizer.cc 當中。不過看來並沒有支援 emoji (笑)。

雖然還不確定如何能不能再對評分或分詞細節規則進行微調,但至少已經變得很有用了。