这是知名XX的一个国家级OO,我提供技术支持。需要搜集所有与XX业有关的法律法规,并制作成一个数据库,并留出接口,有可能在官方网站提供该服务。
中华人民共和国XXXX总署网站使用jsp编写,估计整站架构在J2EE上。对于那个庞大的系统而言,我个人只是个游击队员,做好我的事情,让他们iframe去吧。
我打算使用Mysql(高于5的版本)+PHP完成。虽说Mysql内部已经支持FullText检索,但对于大量汉字而言,还是很不理想,如果数据量巨大,等待时间会很长。所以在网上搜寻解决方案。看到了Xunsearch的开源项目,看了他们的API,头有点大了,于是再找,所有线索都指向SCWS这个东东。最后突然发现:SCWS就是Xunsearch的爷爷。所以硬着头皮还是自己认真再搞吧。这是项目历史:
- 在 Xungle 项目的运作过程中,我们发现还有大量的用户出于各种原因,不得不自行解决搜索技术。此外, 我们发现了国外一个优秀的开源搜索引擎基础库 Xapian,它采用 C/C++ 开发,并且性能卓越,久经考验。 但是并没有整合中文分词,并且开发难度、复杂度也较大。于是我们下决心整合 Xapian 和 Scws,并在此基础上 提供更多、更常用的搜索功能。这就是 Xunsearch ,目前版本发布正在准备中,代码也已托管到 github 中。
接着看看项目的许可协议,很好,很给力GPL。
- Xunsearch (包含 SDK 在内) 是一个免费开源的全文搜索软件,在以下描述的 GPL 通用许可证的条款下发布。
首先,我使用的是Win7(32Bit),Xunsearch需要Linux运行环境,正好是我的强项。下载Virtualbox(Opensource的,鄙视日常使用盗版VM)。
网址是:virtualbox.org
然后去下载CentOS,登陆mirrors.sohu.com,选择合适的版本,我用的可是精简版哦。
ok,一边下着ISO一边安装并新建一个3G的虚拟机,我不是财迷只分3G空间,我用的是固态硬盘,一共才30个G。再说也没必要弄那么大,我估计2个G就够。建好后如下图:
接下来就是安装CentOS6。呵呵,固态硬盘真是给力,笔记本2分钟搞定系统安装,真的只有2分钟啊。系统重启,然后就是LAMP罗:
- yum install mysql-server php php-mysql ntsysv
在YUM的时候错了,闹出了一些小插曲,首先是虚拟机没IP,不知怎么回事,编辑几个文件,设定好。然后设置mirrors.sohu.com的yum源,把mirrors打成了mirror,让我好半天才找到这个错误。
接着yum install wget,下载xunsearch-full-latest.tar.bz2稳定包,放到/opt下解压。
郁闷的事来了,告诉我先是没有g++,我就装。又是没有make,我又装。后来告诉我没有c++的编译器。。。晕了,gcc不就能编译c++了么。。。怎么回事,又上网搜。最后找到一个gcc-c++软件包。安装,再次回来执行
又出问题了,提示我zlib.h没找到。需要安装zlib1g-dev或者zlib-devel包。麻烦的,zlib1g-dev库里没有,安装的是zlib-devel。接着继续编译。千万别在error了,拜托。过了很久、很久,终于装好了。%>_<%
看来用最小化的CentOS包下载简单,稍复杂点使用的时候就麻烦了。
使用/opt/bin/xs-ctl.sh start/restart/stop可以开始、重启和关闭。
按照安装建议,编辑/etc/rc.local文件加入/opt/bin/xs-ctl.sh start。
后来发现问题,httpd启动了但从WIN7下访问不到。两天后我又重做了系统,按xunsearch的默认目录安装,还是访问不到。弄了半天,才发现Iptalbes给拒绝了。所以关闭iptables。就ok罗。
现在可以做测试了。vi index.php
结果是这样的:
看来符合要求。
后来才发现,在Linux下直接把这个PHP文件当作命令即可:
- [root@sm ~]# cd /usr/local/xunsearch/
-
[root@sm xunsearch]# ls
-
bin data etc include lib sdk share tmp
-
[root@sm xunsearch]# ./sdk/php/util/
-
Indexer.php Quest.php SearchSkel.php XSDataSource.class.php
-
IniWizzard.php RequiredCheck.php skel/ XSUtil.class.php
-
[root@sm xunsearch]# ./sdk/php/util/RequiredCheck.php
-
Xunsearch PHP-SDK 运行需求检查
-
==============================
-
-
检查内容
-
--------
-
-
本程序用于确认您的服务器配置是否能满足运行 Xunsearch PHP-SDK 的要求。
-
它将检查服务器所运行的 PHP 版本,查看是否安装了合适的PHP扩展模块,以及
-
确认 php.ini 文件是否正确设置。
-
-
+------------+------------+--------------------------+--------------------------------+
-
| 项目 | 结果 | 用于 | 备注 |
-
+------------+------------+--------------------------+--------------------------------+
-
| PHP 版本 | 5.3.8 | XS(core) | PHP 5.2.0 或更高版本是必须的。 |
-
| SPL 扩展 | OK | XS(core) | SPL 扩展用于自动加载和对象戏法 |
-
| PCRE 扩展 | OK | XSDocument, XSSearch | 用于字符串切割、判断 |
-
| 编码转换 | mbstring | XSDocument, XSSearch | 用于支持非 UTF-8 字符集 |
-
| 缓存模块 | WARNING | XS | 用于缓存项目配置文件的解析结果 |
-
| JSON 扩展 | OK | util.Quest, util.Indexer | 用于读取或输出 JSON 格式的数据 |
-
| XML 扩展 | OK | util.Indexer | 用于读取导入 XML 格式的数据 |
-
| MySQL 扩展 | mysql | util.Indexer | 用于读取导入 MySQL 的数据库 |
-
| SQLite 扩 | sqlite | util.Indexer | 用于读取导入 SQLite 的数据库 |
-
+------------+------------+--------------------------+--------------------------------+
-
-
检查结果
-
--------
-
-
共计 8 项通过,1 项警告,0 项错误。
-
-
您的服务器配置符合 Xunsearch/PHP-SDK 的最低要求。
-
如果您需要使用特定的功能,请关注上述的 WARNING 项。
-
[root@sm xunsearch]# ls
-
bin data etc include lib sdk share tmp
-
[root@sm xunsearch]# ./bin/xs-ctl.sh restart
-
INFO: stopping server[xs-indexd] (BIND:127.0.0.1:8383) .... [OK]
-
INFO: re-starting server[xs-indexd] ... (BIND:127.0.0.1:8383)
-
INFO: stopping server[xs-searchd] (BIND:127.0.0.1:8384) .... [OK]
-
INFO: re-starting server[xs-searchd] ... (BIND:127.0.0.1:8384)
-
./bin/xs-ctl.sh: line 71: 5576 段错误 bin/xs-searchd -l tmp/searchd.log -b $bsearch -k $cmd
-
[root@sm xunsearch]# ls
-
bin data etc include lib sdk share tmp
-
[root@sm xunsearch]# ll
-
总计 32
-
drwxr-xr-x 2 root root 4096 12-01 21:46 bin
-
drwxr-xr-x 2 root root 4096 12-01 21:46 data
-
drwxr-xr-x 2 root root 4096 12-01 21:45 etc
-
drwxr-xr-x 4 root root 4096 12-01 21:45 include
-
drwxr-xr-x 3 root root 4096 12-01 21:45 lib
-
drwxr-xr-x 3 root root 4096 12-01 21:46 sdk
-
drwxr-xr-x 5 root root 4096 12-01 21:44 share
-
drwxr-xr-x 2 root root 4096 12-01 22:13 tmp
-
[root@sm xunsearch]# ls data/
-
[root@sm xunsearch]# ls tmp/
-
indexd.log pid.127_0_0_1_8383 pid.127_0_0_1_8384 searchd.log
-
[root@sm xunsearch]# cat tmp/searchd.log
-
2011-12-01 22:13:48 searchd[26192] caught system exceptional signal[11], terminate immediately
-
2011-12-01 22:13:48 searchd[26194] bind() or listen() failed, error: Address already in use(#98)
-
2011-12-01 22:13:48 searchd[26194] socket server listen/bind failed
-
2011-12-01 22:17:06 searchd[5103] caught system exceptional signal[11], terminate immediately
-
2011-12-01 22:17:06 searchd[5105] succesful to spawn child worker[1] process (PID:5106)
-
2011-12-01 22:17:06 searchd[5105] succesful to spawn child worker[2] process (PID:5107)
-
2011-12-01 22:17:06 searchd[5105] succesful to spawn child worker[3] process (PID:5108)
-
2011-12-01 22:17:06 ~master[5105] search server is ready for waiting system signal (WORKER_NUM:3)
-
2011-12-01 22:17:06 worker1[5106] I came, happy to meet you
-
2011-12-01 22:17:06 worker1[5106] init the thread pool
-
2011-12-01 22:17:06 worker2[5107] I came, happy to meet you
-
2011-12-01 22:17:06 worker2[5107] init the thread pool
-
2011-12-01 22:17:06 worker3[5108] I came, happy to meet you
-
2011-12-01 22:17:06 worker3[5108] init the thread pool
-
2011-12-01 22:17:06 worker1[5106] event server start (FLAG:0x0004)
-
2011-12-01 22:17:06 worker2[5107] event server start (FLAG:0x0004)
-
2011-12-01 22:17:06 worker3[5108] event server start (FLAG:0x0004)
-
2011-12-01 22:21:07 ~master[5105] caught SIGINT, shutdown gracefully
-
2011-12-01 22:21:07 ~master[5105] broadcast exit signal[2] to all worker processes
-
2011-12-01 22:21:07 worker1[5106] caught SIGINT, shutdown gracefully
-
2011-12-01 22:21:07 worker1[5106] NULL connection pointer received, server quit gracefully
-
2011-12-01 22:21:07 worker1[5106] event server end
-
2011-12-01 22:21:07 worker1[5106] deinit the thread pool
-
2011-12-01 22:21:07 worker2[5107] caught SIGINT, shutdown gracefully
-
2011-12-01 22:21:07 worker2[5107] NULL connection pointer received, server quit gracefully
-
2011-12-01 22:21:07 worker2[5107] event server end
-
2011-12-01 22:21:07 worker2[5107] deinit the thread pool
-
2011-12-01 22:21:07 worker3[5108] caught SIGINT, shutdown gracefully
-
2011-12-01 22:21:07 worker3[5108] NULL connection pointer received, server quit gracefully
-
2011-12-01 22:21:07 worker3[5108] event server end
-
2011-12-01 22:21:07 worker3[5108] deinit the thread pool
-
2011-12-01 22:21:07 ~master[5105] child process worker[2] exit (PID:5107, STATUS:0)
-
2011-12-01 22:21:07 ~master[5105] child process worker[1] exit (PID:5106, STATUS:0)
-
2011-12-01 22:21:07 ~master[5105] child process worker[3] exit (PID:5108, STATUS:0)
-
2011-12-01 22:21:07 ~master[5105] byebye, I should exit now
-
2011-12-01 22:21:08 searchd[5576] caught system exceptional signal[11], terminate immediately
-
2011-12-01 22:21:08 searchd[5578] succesful to spawn child worker[1] process (PID:5579)
-
2011-12-01 22:21:08 searchd[5578] succesful to spawn child worker[2] process (PID:5580)
-
2011-12-01 22:21:08 searchd[5578] succesful to spawn child worker[3] process (PID:5581)
-
2011-12-01 22:21:08 ~master[5578] search server is ready for waiting system signal (WORKER_NUM:3)
-
2011-12-01 22:21:08 worker1[5579] I came, happy to meet you
-
2011-12-01 22:21:08 worker1[5579] init the thread pool
-
2011-12-01 22:21:08 worker1[5579] event server start (FLAG:0x0004)
-
2011-12-01 22:21:08 worker2[5580] I came, happy to meet you
-
2011-12-01 22:21:08 worker2[5580] init the thread pool
-
2011-12-01 22:21:08 worker3[5581] I came, happy to meet you
-
2011-12-01 22:21:08 worker3[5581] init the thread pool
-
2011-12-01 22:21:08 worker2[5580] event server start (FLAG:0x0004)
-
2011-12-01 22:21:08 worker3[5581] event server start (FLAG:0x0004)
-
[root@sm xunsearch]# ./bin/xs-ctl.sh restart
-
INFO: stopping server[xs-indexd] (BIND:127.0.0.1:8383) .... [OK]
-
INFO: re-starting server[xs-indexd] ... (BIND:127.0.0.1:8383)
-
INFO: stopping server[xs-searchd] (BIND:127.0.0.1:8384) .... [OK]
-
INFO: re-starting server[xs-searchd] ... (BIND:127.0.0.1:8384)
-
[root@sm xunsearch]# ls
-
bin data etc include lib sdk share tmp
-
[root@sm xunsearch]# ./sdk/php/util/Indexer.php --source=csv --clean demo
-
清空现有索引数据 ...
-
初始化数据源 ... csv
-
WARNING: input file not specified, read data from <STDIN>
-
开始批量导入数据 (请直接输入数据) ...
-
1,关于 xunsearch 的 DEMO 项目测试,项目测试是一个很有意思的行为!,1314336158
-
2,测试第二篇,这里是第二篇文章的内容,1314336160
-
3,项目测试第三篇,俗话说,无三不成礼,所以就有了第三篇,1314336168
-
INFO: reach end of file or error occured, total lines: 3
-
完成索引导入:成功 3 条,失败 0 条
-
刷新索引提交 ...
-
[root@sm xunsearch]#
接着做测试:
- [root@sm xunsearch]# ./sdk/php/util/Quest.php demo 项目
-
在 3 条数据中,大约有 2 条包含 项目 ,第 1-2 条,用时:0.0307 秒。
-
-
1. 项目测试第三篇 #3# [100%]
-
俗话说,无三不成礼,所以就有了第三篇
-
Chrono:1.31434e+09
-
-
2. 关于 xunsearch 的 DEMO 项目测试 #1# [98%]
-
项目测试是一个很有意思的行为!
-
Chrono:1.31434e+09
-
-
[root@sm xunsearch]# ./sdk/php/util/Quest.php demo 测试
-
在 3 条数据中,大约有 3 条包含 测试 ,第 1-3 条,用时:0.0071 秒。
-
-
1. 测试第二篇 #2# [100%]
-
这里是第二篇文章的内容
-
Chrono:1.31434e+09
-
-
2. 项目测试第三篇 #3# [97%]
-
俗话说,无三不成礼,所以就有了第三篇
-
Chrono:1.31434e+09
-
-
3. 关于 xunsearch 的 DEMO 项目测试 #1# [96%]
-
项目测试是一个很有意思的行为!
-
Chrono:1.31434e+09
-
-
[root@sm xunsearch]#
其实,已经能够看到返回结果了。效果还不错。这个Demo展示了xunsearch的主要功能。最后看一下这个Demo的ini配置文件:
- [root@sm xunsearch]# cat ./sdk/php/app/demo.ini
-
project.name = demo
-
project.default_charset = utf-8
-
server.index = 8383
-
server.search = 8384
-
-
[pid]
-
type = id
-
-
[subject]
-
type = title
-
-
[message]
-
type = body
-
-
[chrono]
-
type = numeric
-
-
[root@sm xunsearch]#
其中8383是索引服务端口,8384是搜索服务端口。这两个端口一定都得正常运行才能提供有效服务。
接下来,测试字段和布尔搜索功能:- [root@sm xunsearch]# ./sdk/php/util/Indexer.php --flush-log demo
-
刷新搜索日志 ...
-
成功,注意:后台更新需要一些时间,并不是真正立即完成。
-
[root@sm xunsearch]# ./sdk/php/util/Quest.php demo subject:测试
-
在 3 条数据中,大约有 3 条包含 subject:测试 ,第 1-3 条,用时:0.0095 秒。
-
-
1. 测试第二篇 #2# [100%]
-
这里是第二篇文章的内容
-
Chrono:1.31434e+09
-
-
2. 项目测试第三篇 #3# [97%]
-
俗话说,无三不成礼,所以就有了第三篇
-
Chrono:1.31434e+09
-
-
3. 关于 xunsearch 的 DEMO 项目测试 #1# [93%]
-
项目测试是一个很有意思的行为!
-
Chrono:1.31434e+09
-
-
[root@sm xunsearch]# ./sdk/php/util/Quest.php demo pid:2
-
在 3 条数据中,大约有 1 条包含 pid:2 ,第 1-1 条,用时:0.0060 秒。
-
-
1. 测试第二篇 #2# [100%]
-
这里是第二篇文章的内容
-
Chrono:1.31434e+09
-
-
[root@sm xunsearch]# ./sdk/php/util/Quest.php demo "第三篇 OR pid:1"
-
在 3 条数据中,大约有 2 条包含 第三篇 OR pid:1 ,第 1-2 条,用时:0.0066 秒。
-
-
1. 项目测试第三篇 #3# [100%]
-
俗话说,无三不成礼,所以就有了第三篇
-
Chrono:1.31434e+09
-
-
2. 关于 xunsearch 的 DEMO 项目测试 #1# [0%]
-
项目测试是一个很有意思的行为!
-
Chrono:1.31434e+09
-
-
相关搜索:第三
-
-
[root@sm xunsearch]# ./sdk/php/util/Quest.php demo "第三篇 or pid:1"
-
在 3 条数据中,大约有 0 条包含 第三篇 or pid:1 ,第 0-0 条,用时:0.0056 秒。
-
-
相关搜索:第三
-
-
[root@sm xunsearch]#
这是再测试一下日志相关的搜索情况,其中 --suggest 是搜索建议,当用户敲入少许汉字或字母时给出相应的关键词建议(常用于搜索输入框下拉自动提示),而 --related 表示相关搜索、--hot 表示热门搜索、 --correct 表示搜索纠错。 现在还暂时不涉及到编程,估计下一步就开始做开发了。但毕竟弄懂原理是第一位的。
阅读(3534) | 评论(0) | 转发(0) |