php框架

 首页 > php框架 > ThinkPHP > ThinkPHP如何配置使用coreseek(sphinx)中文分词

ThinkPHP如何配置使用coreseek(sphinx)中文分词

分享到:
【字体:
导读:
         [导读] 在网上找了很久,thinkphp是没有sphinx扩展的,那么我们可以自己扩展一个用,今天搞了好久,只能总结一点thinkphp调用sphinxapi的一段小代码 首先我们把coreseek下载好,命名为coreseek,我们找到cor...

在网上找了很久,thinkphp是没有sphinx扩展的,那么我们可以自己扩展一个用,今天搞了好久,只能总结一点thinkphp调用sphinxapi的一段小代码


首先我们把coreseek下载好,命名为coreseek,我们找到coreseek/etc中的csft_mysql.conf修改这个配置文件


#源定义
source lemai
{
type                    = mysql
sql_host                = localhost
sql_user                = root
sql_pass                = 123
sql_db                    = lemai
sql_port                = 3306
sql_query_pre            = SET NAMES utf8
sql_query                = SELECT id, title,content,name FROM shop
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint            = sid           #从SQL读取到的值必须为整数
sql_attr_timestamp        = time #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
sql_query_info            = SELECT * FROM shop WHERE name=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index lemai
{
source            = lemai             #对应的source名称
path            = var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
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 = C:/AppServ/www/thinkphp/ThinkPHP/Extend/Vendor/Coreseek/etc/

#Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...

charset_type        = zh_cn.utf-8
#charset_table      =
ngram_len            = 0
}
#全局index定义
indexer
{
mem_limit            = 128M
}
#searchd服务定义
searchd
{
listen                  =   9312
read_timeout        = 5
max_children        = 30
max_matches            = 1000
seamless_rotate        = 0
preopen_indexes        = 0
unlink_old            = 1
pid_file = var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}


然后把coreseek拷贝一份到thinkphp的核心文件Extend/Vendor下.

打开cmd  cd到coreseek


binindexer -c etccsft_mysql.conf (mysql,等)数据库名 创建索引


创建完之后我们可以在vardata下看到一堆文件,此时说明创建成功


binsearchd -c etccsft_mysql.conf --console   启动进程


(检查端口9312是否有这个进程,有就OK)


命令行查询


echo 一号店 |iconv -f gbk -t utf-8 | search -c etccsft_mysql.conf --stdin | iconv -f utf-8 -t gbk     中文索引查询


然后就可以在控制器中进行PHP连接sphinxapi进行测试了


Vendor('Coreseek.api.sphinxapi');

//加载第三方扩展包的文件  文件名不包含class


$db = new PDO('mysql:host=localhost;port=3306;dbname=lemai', 'root', '123', array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));

//实例化PDO


$spx = new SphinxClient();
//实例化SphinxClient
$spx -> SetServer('127.0.0.1',9312);
$spx->SetConnectTimeout ( 3 );
$spx->SetArrayResult ( true );
$spx -> SetMatchMode(SPH_MATCH_ANY);
$result = $spx -> query('1','*');
$ids = join(",",array_keys($result['matches']));
$sql = "SELECT * FROM shop where id in ({$ids})";
$stmt = $db->query($sql);
$r = $stmt->FETCHALL(PDO::FETCH_ASSOC);
echo "
";
var_dump($r);


 


分享到:
ThinkPHP视图查询详解使用
ThinkPHP视图查询详解使用 ThinkPHP提供的视图查询应用功能十分强大,用户利用视图查询功能可以将多个数据表的字段内容按需要进行指定和筛选,组织成一个基于这些数据表的视图模型,然后就可以通过该模型直接进行多表联合查询,非常方便和简单。 例如在项目中,我们定义有三个表: user          用户基础表, us...
thinkphp引入sphinx错误问题
php报错:Cannot redeclare class 提示的解决方法 分析下有以下几种原因 1是php已经引入了sphinx扩展,二次加载了 2路径错误 解决办法 去掉引入文件 直接$spx = new \SphinxClient; 那么问题解决了
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……