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不一致会神作
告诉我是我打开方式不对