Sphinx/Coreseek简介&安装使用

本文介绍了Sphinx和Coreseek,它们是用于大数据量下高效全文检索的工具。Sphinx提供专业的搜索功能,而Coreseek是专攻中文搜索的开源软件。文章详细阐述了Coreseek在Linux下的安装步骤,配置过程,以及如何启动服务并使用PHP进行连接。此外,还讨论了文章的定时更新和增量索引策略。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值