如果你有看Beta昨日的blog就知道,我的那个google版本的“搜索厦大”加了一个proxy就被仓促推出场了。点这里厦大主页或者这里。这个肯定不是最终解决方案,最终我们一定得建一个自己的google,过几天要滚回家了,这个东西对我还算有点吸引力,看看能不能在几天之内搞定这个。于是又上searchtools.com的opensource页面上巡视各个搜索引擎。

首先是ht://Dig,我的。。。初搜索引擎。。。,当然先拿他开刀,一个好的习惯,先大致浏览一下文档,看到FAQ时:

Current versions of ht://Dig only support 8-bit characters, so languages such as Chinese and Japanese, which require 16-bit characters, are not currently supported.

ft。。。看来得换一个了,不用浪费时间在ht://Dig上了。

正选择从哪个下手时,zhh发送过来一个链接,mnogosearch,好吧,就用他了。

下载了安装,启动auto config的install.pl,make,make install,一切顺利,安装完毕,配置一下indexer.conf,加入http://test.domain,配置langmap.conf,运行indexer,把search.cgi拷贝到cgi-bin目录下面,在浏览器里输入search.cgi,输入关键字,查询结果出来了。mail给领导:找到另一个solution。

ft,一切如果有这么顺利就好了,我就不用放假了还每晚奋斗到12点,不用听着耳机在路上行尸走肉傻傻得想:到底是哪里出了问题?为什么程序一点反映都没有。如果mnogosearch是一个人,我一定掐着他的脖子说:你给我输出结果呀!!!。幸好运气比较好,问题被一个个地解决了,这里写出几个比较花时间的,仅供参考。

写得比较长,对于解决mnogosearch这个特定问题,以下这些没有任何用处。是不是说如果你不安装,你就不用看下面的内容?其实我是希望读的人能从中学习到解决问题的办法,跟着我的安装步骤,想想你会大概会想怎么做,我的办法如何?如果有好的想法,请告诉我呵呵。如果有更好的搜索引擎,也一定告诉我。

点击详细内容查看。
第一个是数据库。

先使用mysql,运行自带的create.txt,ft,脚本出错。这怎么可能,手册里说的是只有mysql up to date的呀,连mysql你都不行,其他的?ft。sigh,不管,mysql不行,我先用built-in数据库。可是用built-in,运行indexer提示找不到目录保存数据,VarDir也设置了呀,又弄了半天,还是用回mysql数据库,哪行出错我改哪行,终于马马虎虎mysql数据库建立起来了。编译indexer,运行,提示:找不到libmysqlclient.6.0,咳咳,这是个经典问题,解决当然不在话下。简单ln一个lib到/lib下。

第二个是charset的问题

由于看了document,里面提到:

mnoGoSearch supports almost all known 8 bit character sets as well as some multi-byte charsets including Korean euc-kr, Chinese big5 and gb2312, Japanese shift-jis, euc-jp and iso-2022-jp, as well as utf8.

打了定心丸了,哪知修改indexer.conf时设置

Chinese

#LocalCharset gb2312
#LocalCharset BIG5
把前面那个#去掉,indexer提示该行出错,charset gb2312 is not supported。。。ft,难道他们在骗我?是不是别的地方还有设置?于是把langmap.conf,stopword.conf到处都修改成gb2312,还是不行。不过这个不要紧,先用缺省的试pure英文搜索,如果很烂,那可以赶快去找另一个。最后瞎折腾了一通,英文可以搜索了,可是还是不支持中文。看着出错信息发呆,好吧,你不是有源代码吗,进入源代码看看。opensource的好处现在就体现出来了,进入src目录,grep “not supported”,找到目标,在conf.c里面,调用UdmGetCharSet函数,再grep UdmGetCharSet,发现里面有段

#ifdef HAVE_CHARSET_gb2312

嘿嘿,找到你了,grep看看HAVE_CHARSET_gb2312有没有定义,在inclucd目录下的udm_config.h找到

/* #undefine HAVE_CHARSET_gb2312 */

哈哈,改为
#define HAVE_CHARSET_gb2312

果然嗖嗖嗖,indexer不报错了。不过想想,怎么可能要求进入这里修改,如果大家都不像我这么聪明,怎么行?(事后证明,如果大家都不像我这么笨~~~~)。查找udm_config.h头几行,原来

/* include/udm_config.h. Generated by configure. */

再进入configure,发现

Check whether –with-extra-charsets or –without-extra-charsets was given.

gb2312)
cat »confdefs.h «_ACEOF
#define HAVE_CHARSET_gb2312 1
_ACEOF

ft。。。也就是说,如果不是用install.pl而使用./configure –with-extra-charsets=gb2312,就没这么多麻烦事,再看了install manual,人家早就说了,开始只想让他运转起来,不管charset,后来要解决charset问题又一直找language support section,没有去注意install section。。。

第三是search.htm的DBAddr

话说indexer已经可以正常运转了,查看mysql数据库,数据也写入了(这时charset的问题还未解决,都是英文),心情那个激动呀。可惜在search.cgi里面输入字符搜索,什么都找不到,根据dict table找到一个单词输入,还是什么都找不到,ft。

去做别的事14个小时。有些事情一开始一直解决不了,就先放着几天,可能就会很轻松地解决了:)

后来又打开,search template search.htm,冷漠得看着前面的几个参数设定,如果这是电影,是不是可能我的旁边有一个女鬼,她一直指着DBAddr告诉我,就是那里,那里。可是主角。。我。。一直听不见。观众在外面干着急呀。。。

可惜女鬼没有,鬼都没一个,Cache,TrackQuery,这些参数应该都没必要。DBAddr早就设置过了,而且不会把用户名和密码放在html文件里吧(最后证实是template,不是真正的html文件)。后来无所事事,就随便修改了DBAddr,居然可以了。ft。这太夸张了,相同的参数居然要设置2次,如果是我写的代码,肯定不会要求这样:shy:,不管了,反正搜索结果也出来了。

第四是搜索结果

这时中文问题和搜索都解决了,在dict table也可以看到index的结果,这个index的结果是有遇到标点符号才分开句子,所以每个key words都比较长,看到里面有一个“招生”,就输入,嘿嘿,结果出来了,试试“招”,ft,什么结果都没了,完蛋,不能够吧,这样的搜索引擎还有什么用处,自己想了想,英文比较好判断,标点符号和空格可以定位一个单词,这么小的搜索引擎,也没有词法分析,看来对中文能搜索到这样已经是仁至义尽了,要放弃了,或者我去修改源代码,如果是中文,每个字单独index起来。正想着,随便点开Extended mode,也是随便看看,发现有Search for Whole Word, From Beginning,SubString,选择SubString,“招”也搜索出结果了。ft,原来是这样,看来对中文只能在Extend mode里面搜索。又玩了几次,突然发现,怎么每次都只查到一个结果?试了“的”,还是只有一个,完蛋,赶快找设置,发现原来是group by site在作怪,因为我只用一个site测试,所以每次都只有一个结果,改一下,搜索出来界面,很google了哈。

其实目前还是有很多问题,不过大的问题都解决了,其他应该就是little case了。。。对于mnogosearch的优点和缺点在这里也暂时不review。测试站点暂不公布:)写了好多,休息会儿。

I will be back。。。

##评论


匿名2003-08-08 01:50:11 说: 最近找到一个东东