This patches include work from nzinfo (add mmseg support) and my patch for Hiragana and Katagana support (see this blog post). The changes can be viewed here.
For Sphinx 2.11.1:Github dl.yooooo.us
For Sphinx 2.3.2:Github dl.yooooo.us
This patches include work from nzinfo (add mmseg support) and my patch for Hiragana and Katagana support (see this blog post). The changes can be viewed here.
For Sphinx 2.11.1:Github dl.yooooo.us
For Sphinx 2.3.2:Github dl.yooooo.us
coreseek是一個修改版的sphinx,用mmseg來做中文分詞。但是發現一個問題,日語搜索總是效果很差,全部是假名的關鍵詞會返回一個空結果。
開始猜想是不是詞庫沒有包含日語的關係,後來仔細想了一想,mmseg對於沒有在詞典里的詞應該是直接一元分詞的,按理說也不應該出現無法索引日語的關係。我們可以通過mmseg命令行工具來證明這一點:
1 2 |
$ /usr/local/mmseg/bin/mmseg -d /usr/local/mmseg/etc/ 1.txt ヨ/x ス/x ガ/x ノ/x ソ/x ラ/x |
證明mmseg進行了一元分詞。
那麼為什麼coreseek搜不到假名呢?我找啊找啊終於發現在coreseek使用mmseg進行分詞的過程中,對輸入字元做了一個過濾,並且有一個注釋:
1 2 3 4 5 |
// BEGIN CJK There is no case folding, should do this in remote tokenizer. // Here just make CJK Charactor will remain. --coreseek dRemaps.Add ( CSphRemapRange ( 0x4e00, 0x9FFF, 0x4e00 ) ); dRemaps.Add ( CSphRemapRange ( 0xFF00, 0xFFFF, 0xFF00 ) ); dRemaps.Add ( CSphRemapRange ( 0x3040, 0x303F, 0x3040 ) ); |
可見coreseek雖然將CJK (Chinese, Japanese, Korean) 中所有漢字、全形字元和標點加入了範圍,但是卻漏掉了平假名和片假名。因此我們將第三個range改成0x3000, 0x30FF, 0x3000就可以修正這個問題。
其中:
1 2 3 4 |
// 4e00 - 9fff CJK unified ideographs // 3000 - 303f CJK symbols and punctuation // 3040 - 30ff Hiragana/Katagana // ff00 - ffff half/fullwidth forms |
我把修改後的版本放到了github
另外,這裡可以查詢到Unicode編碼範圍對應的字元內容;unicode.org有一個database,但是是一個列出了全部字元的大pdf,我似乎沒有找到類似的分類。
對於Ubuntu/Debian,這裡有編譯好的coreseek的deb包:i386 amd64;依賴於mmseg:i386 amd64;mmseg自帶的詞典
對於>2.2.10的版本,我在這篇博客里提供了完整的補丁,可以應用在sphinx的源碼上編譯。
使用ubuntu/debian系統32位的可以在這裡下載我編譯好的coreseek5/csft包
對於>2.2.10的版本,我在這篇博客里提供了完整的補丁,可以應用在sphinx的源碼上編譯。
1 2 3 4 5 6 |
git clone https://github.com/nzinfo/mmseg cd mmseg automake --add-missing ./bootstrap ./configure --prefix=/usr/local/mmseg make && make install |
1 2 3 4 5 6 7 |
apt-get install Cython git clone https://github.com/nzinfo/csft cd csft git checkout r/csft5 sh buildconf.sh automake --add-missing ./configure --prefix=/usr/local/coreseek --with-mysql --with-mmseg-includes=/usr/local/mmseg/include/mmseg --with-mmseg-libs=/usr/local/mmseg/lib |
自動腳本有一些bug :
如果用4.1的話不能用最新版的sphinxclient,可以去sphinx_php_api的trunk里找define ( “VER_COMMAND_SEARCH”, 0x117 );的版本(0x117 ->1.23)
最後貼一個圖來表達對xunsearch的…………
又慢(搜索比sphinx慢5~10倍,索引體積比原始數據大7倍,比sphinx大21倍),結果又少(mysql模糊搜索≈coreseek搜索≈740+,這貨只有114,$search->count獲得的精確值是286條)
另外ini文件名和裡面填的project_name不一致會神作
告訴我是我打開方式不對