插件 acts_as_ferret 中文搜索

插件 acts_as_ferret 中文搜索

虽然很不好意经常来这里请教问题,但不懂就是懂啊,不知道从哪里入手做,还是希望能被引导一下!
在网上先查了很多关于acts_as_ferret的文章,也学着做了,但是始终搜索出来的东西不是很对,没有sql的like准确。更恼火的是不能搜索中文!输入中文搜索,出来的结果是:0
于是查了一下怎么对中文分词,说是设置analyzer就行

[Copy to clipboard] [ - ]
对ferret不熟. 不过你的问题可以帮忙解答一下.

ferret是一个IR库. 他通过构建inverted index来进行索引. 然后利用inverted index来搜索.
而sql的like是table full scan, 通过string compare来获取结果.

一比就知在搜索灵活性和效率上会有很大的差别.

关于中文索引. 最关键的是如何分词, 才能获得尽可能精确的结果. ferret没有builtin的中文分词模块, 现在
所有有的用ferret来分词的方法都是用单词分词. GENERIC_ANALYSIS_REGEX就是匹配latin英文串, 数字串, 中文单字, 然后让ferret以这个正则来构建analyzer,进行分词.

有点要注意的encoding必须是UTF-8.

至于找不到结果, 你可以自己来排错一下. 这个帮不了你. 主要就是脱离rails环境, 自己写测试程序去读索引文件, 结果一目了然.
你看看这个文章,照着设置一下编码,看看有没有帮助。

http://www.dockblog.de/2007/04/0 ... -etch-with-apache2/
“匹配latin英文串, 数字串, 中文单字” 
比如有一个字符串:“个人签名认证”,那是不是说除了搜索这个字符串,还会以每个字为关键字去搜索吗?!

我曾在我的article表中搜索含“c++”的文章,结果连只有“c” 的文章也一起搜索了!
一般特殊符号(比如+)都不会进入索引, 原来就是生僻词, 代价又大. 比如你的analyzer就会skip掉这些符号, 所有只有c的文章也一起搜索了是很正常的.

如果你真的需要, 就需要你自己去专门处理一下了.