很多使用php+mysql数据库的朋友都有可能使用到coreseek了,coreseek是一款非常不错的中文全文检索/搜索软件了,下面小编就一起来看看吧.
一般站点都需要搜索功能,如果是php+mysql站点,建议选择coreseek,如果是java站点建议使用lucene,coreseek 是一款很好的中文全文检索/搜索软件,支持高速建立索引、有很强的扩展性、支持分布式检索,支持不同的搜索模式(’完全匹配’,’短语匹配’,’任一匹配’).
一、coreseek 安装
1:安装mmseg分词库
- wgethttp://www.coreseek.cn/uploads/csft/4.0/coreseek-3.2.14-beta.tar.gz
- tar-zxvfcoreseek-3.2.14-beta.tar.gz
- cdcoreseek-3.2.14-beta
- cdmmseg-3.2.14
- ./bootstrap
- ./configure--prefix=/usr/local/mmseg3#配置安装目录
- make
- makeinstall
- cd..
2:安装coreseek
- cdcsft-3.2.14
- shbuildconf.sh
- ./configure--prefix=/usr/local/coreseek--without-unixodbc--with-mmseg--with-mmseg-includes=/usr/local/mmseg3/include/mmseg/--with-mmseg-libs=/usr/local/mmseg3/lib/--with-mysql=/usr/local/mysql
- make
- makeinstall
- cd..
3:测试mmseg分词和coreseek检索
- cd/usr/local/src/coreseek-3.2.14
- cdtestpack
- catvar/test/test.xml#现实的是中文的内容
- /usr/local/mmseg3/bin/mmseg-d/usr/local/mmseg3/etcvar/test/test.xml#显示xml文件内容
- /usr/local/coreseek/bin/indexer-cetc/csft.conf--all#建立索引
- /usr/local/coreseek/bin/search-cetc/csft.conf#进行搜索
二、coreseek配置和使用
1:配置example.conf文件
- cd/usr/local/coreseek/etc
- cpsphinx-min.conf.distexample.conf
对example.conf的配置进行改造,变成我们所需的配置文件.
- sourceexample
- {
- type=mysql
- sql_host=localhost
- sql_user=***
- sql_pass=***
- sql_db=***
- sql_port=3306
- sql_sock=/tmp/mysql.sock
- sql_query_pre=SETNAMESutf8
- sql_query=SELECTid,contentFROMtable_name#不管表的主键叫什么,查出来的结果都是为id
- sql_query_info_pre=SETNAMESutf8#命令行查询时,设置正确的字符集
- sql_query_info=SELECT*FROMtableWHEREid=$idLIMIT100#命令行查询时,从数据库读取原始数据信息
- }
- #index定义
- indexexample
- {
- source=example#对应的source名称
- path=/usr/local/coreseek/var/data/example/#请修改为实际使用的绝对路径
- docinfo=extern
- mlock=0
- morphology=none
- min_word_len=1
- html_strip=0
- #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
- charset_dictpath=/usr/local/mmseg3/etc/#BSD、Linux环境下设置,/符号结尾
- #charset_dictpath=etc/#Windows环境下设置,/符号结尾,最好给出绝对路径,
- charset_type=zh_cn.utf-8
- }//phpfensi.com
- #全局index定义
- indexer
- {
- mem_limit=128M
- }
- #searchd服务定义
- searchd
- {
- listen=9312
- read_timeout=5
- max_children=60
- max_matches=1000
- seamless_rotate=0
- preopen_indexes=0
- unlink_old=1
- pid_file=/usr/local/coreseek/var/log/searchd_example.pid#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
- log=/usr/local/coreseek/var/log/searchd_example.log#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
- query_log=/usr/local/coreseek/var/log/query_example.log#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
- }
2:开启searchd服务(这点很重要).
coreseek刚安装后searchd服务是没开启的,需要先开启,不然创建索引的时候会出错,先在 /usr/local/src/coreseek/var/log下创建一个searchd_example.pid文件,然后执行下面的代码:
- /usr/local/coreseek/bin/searchd--config/usr/local/coreseek/etc/example.conf
3:创建索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/example.conf --all --rotate
出现下面的提示:
- CoreseekFulltext3.2[Sphinx0.9.9-release(r2117)]
- Copyright(c)2007-2011,
- BeijingChoiceSoftwareTechnologiesInc(http://www.coreseek.com)
- usingconfigfile'/usr/local/coreseek/etc/example.conf'...
- indexingindex'example'...
- collected1docs,0.0MB
- sorted0.0Mhits,100.0%done
- total1docs,631bytes
- total0.005sec,118854bytes/sec,188.35docs/sec
- total1reads,0.000sec,0.8kb/callavg,0.0msec/callavg
- total5writes,0.000sec,0.5kb/callavg,0.0msec/callavg
- rotatingindices:succesfullysentSIGHUPtosearchd(pid=14094).
说明coreseek已经可以使用了.
可以把创建索引的命令写入crontab里面进行定时,实时更新索引.
4:php 和 coreseek 结合进行查询
先下载sphinxapi,然后文件引入结合php进行查询,下面更多参数的详解和配置,可以参考 coreseek api php手册.
- require_once('sphinxapi');
- $s=newSphinxClient();
- $s->SetServer('127.0.0.1','9312');//设置searchd的主机名和TCP端口
- $s->SetConnectTimeout(1);//设置连接超时
- $s->SetMatchMode(SPH_MATCH_BOOLEAN);//设置全文查询的匹配模式
- $page_size=20;//自己定义的页数
- $s->SetLimits($start,$page_size);//设置返回结果集偏移量和数目
- $s->SetSortMode(SPH_SORT_EXTENDED,"good_countDESC,@idDESC");//设置排序
- $s->SetArrayResult(true);//控制搜索结果集的返回格式
- $res=$s->Query($keyword,'*');//执行搜索查询
- $res_list=$res['matches'];
coreseek安装遇到的错误和问题解决方案.
1、测试mmseg分词的时候
执行:/usr/local/coreseek/bin/indexer -c etc/csft.conf --all
提示下面的错误:
- /usr/local/coreseek/bin/indexer:errorwhileloadingsharedlibraries:libmysqlclient.so.18:cannotopensharedobjectfile:Nosuchfileordirectory
原因:sphinx indexer的依赖库ibmysqlclient.so.18找不到.
解决办法:
vi /etc/ld.so.conf
加入 /usr/local/mysql/lib
然后运行 ldconfig 问题解决
2、执行索引的时候
- /usr/local/coreseek/bin/indexer-c/usr/local/coreseek/etc/csft_ttd_search.conf--all--rotate
提示下面的错误:
- FATAL:failedtoopen/usr/local/coreseek/var/data/ttd_article/.tmp.spl:Nosuchfileordirectory,willnotindex.Try--rotateoption.
原因:source源找不到mysql.sock
解决办法:在配置文件csft_ttd_search.conf(自己创建的文件)的 source源 加入下面的代码.
sql_sock = /tmp/mysql.sock
3、执行索引的时候,出现的警告,导致索引没创建成功.
- WARNING:failedtoopenpid_file'/usr/local/coreseek/var/log/searchd_ttd_search.pid'.
- WARNING:indicesNOTrotated.
原因:找不到searchd_ttd_search.pid文件
解决办法:在’/usr/local/coreseek/var/log 下创建searchd_ttd_search.pid文件
再执行/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_ttd_search.conf –all –rotate
出现了另外一个警告:
- WARNING:failedtoscanfpidfrompid_file'/usr/local/coreseek/var/log/searchd_ttd_search.pid'.
- WARNING:indicesNOTrotated.
原因:虽然创建了searchd_ttd_search.pid文件,但是里面没有写入进程id
解决办法(根本原因):在执行索引之前没有启动searchd服务,因此执行下面的命令.
- /usr/local/coreseek/bin/searchd--config/usr/local/coreseek/etc/ttd_search.conf
出现了期待已久的成功提示:
- CoreseekFulltext3.2[Sphinx0.9.9-release(r2117)]
- Copyright(c)2007-2011,
- BeijingChoiceSoftwareTechnologiesInc(http://www.coreseek.com)
- usingconfigfile'/usr/local/coreseek/etc/ttd_search.conf'...
- listeningonallinterfaces,port=9312
- rotatingindex'mysql':success