Sphinx/Coreseek简介&安装使用
Sphinx/Coreseek简介
在数据库使用模糊匹配的时候,在数据量少的情况下,使用like '%keywork%'可以解决,但是在数据量大的情况下,查询时间就变得难以忍受了。尤其是访问量大的时候,仅仅靠mysql已经无法支撑业务。Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
Sphinx官网:http://sphinxsearch.com/
Sphinx下载地址:http://sphinxsearch.com/downloads/release/
Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景。对于中文的搜索场景,coreseek比sphinx更为适合。
Coreseek官网:http://www.coreseek.cn/
Coreseek下载地址:http://www.coreseek.cn/products-install/
Coreseek安装
linux下的安装步骤:参考官方文档http://www.coreseek.cn/products-install/install_on_bsd_linux/
安装完成后,在bin目录下有几个可执行文件
-rwxr-xr-x 1 # # 6592748 Oct 15 2013 indexer #索引程序
-rwxr-xr-x 1 # # 6362996 Oct 15 2013 indextool
-rwxr-xr-x 1 # # 6434601 Oct 15 2013 search
-rwxr-xr-x 1 # # 7556446 Oct 15 2013 searchd #搜索服务程序
-rwxr-xr-x 1 # # 6295538 Oct 15 2013 spelldump
Coreseek配置
安装完成后,在/etc下面找到coreseek.conf配置文件
#主索引数据源——用于数据初始化
source article_main
{
type = mysql
sql_host = 127.0.0.1
sql_user = #数据库账号#
sql_pass = #数据库密码#
sql_db = #数据库名称#
sql_port = #数据库端口号# # optional, default is 3306
sql_sock = /tmp/mysql.sock
sql_query_pre = SET NAMES utf8 #预执行语句,避免如果数据库默认字符集不是utf8,会导致查询不命中的情况#
sql_query = #查询的sql语句#
#以下是SQL语句返回的值
sql_attr_uint = CATE_ID
sql_attr_uint = STATUS
sql_attr_uint = IS_ABLE
sql_attr_str2ordinal = SITE_ID
sql_attr_timestamp = ITIME
sql_ranged_throttle = 0
sql_query_info = SELECT * FROM article WHERE ID=$id
}
#增量索引数据源——用于数据更新
source article_delta : article_main #这里继承了article_main的配置
{
sql_query_pre = SET NAMES utf8 #继承方式,不能去掉该项
sql_query = #查询的sql语句#
}
#主索引
index article_main
{
source = article_main
path = /usr/local/coreseek/var/data/article_main #指定索引的存放路径
docinfo = extern
mlock = 0
morphology = none
charset_dictpath = /usr/local/mmseg3/etc/
min_word_len = 1
charset_type = zh_cn.utf-8
html_strip = 0
}
#增量索引
index article_delta : article_main
{
source = article_delta
path = /usr/local/coreseek/var/data/article_delta #指定索引的存放路径
}
indexer
{
mem_limit = 1024M
}
searchd
{
#listen = 127.0.0.1:9312
log = /usr/local/coreseek/var/log/searchd.log
query_log = /usr/local/coreseek/var/log/query.log
read_timeout = 5
client_timeout = 5
max_children = 50
pid_file = /usr/local/coreseek/var/log/searchd.pid
max_matches = 1000 #最大匹配数,api的值不能大于该值
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
}
启动coreseek服务并使用PHP连接
bin/searchd -c etc/coreseek.conf
这里使用PHP调用coreseek的服务,在官网上下载SphinxClient这个class即可,以下是简单的示例代码:
$cl = new SphinxClient ();
$cl->_maxmatches = 200;
$cl->SetServer ('127.0.0.1',9312);
$cl->SetConnectTimeout ( 3 );//超时时间
$cl->SetArrayResult ( true );//返回数组格式
$cl->SetLimits($start, $page_size);
$cl->SetMatchMode ( SPH_MATCH_ANY );
$cl->SetRankingMode( SPH_RANK_PROXIMITY_BM25);
$cl->SetFilter("is_able", array(1));
$cl->SetSortMode ( SPH_SORT_EXTENDED , '@relevance DESC, ITIME DESC ' );//先按时间段排序,再按相关度排序。
$cl->AddQuery ($keyword, "article_main,article_delta");
$results = $cl->RunQueries();
定时更新文章
由于文章内容会不断变化,每次更新重新索引所有文章是不现实的,coreseek提供了增量索引。我们制定了索引的更新策略。
#每天凌晨4点更新一次
00 04 * * * /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/coreseek.conf --all --rotate
#十分钟更新一次
*/10 * * * * /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/coreseek.conf article_delta --rotate
本文介绍了Sphinx和Coreseek,它们是用于大数据量下高效全文检索的工具。Sphinx提供专业的搜索功能,而Coreseek是专攻中文搜索的开源软件。文章详细阐述了Coreseek在Linux下的安装步骤,配置过程,以及如何启动服务并使用PHP进行连接。此外,还讨论了文章的定时更新和增量索引策略。

2885

被折叠的 条评论
为什么被折叠?



