1,这个是我的csft_mysql_.conf 配置文件。
#源定义
source mysql
{
type = mysql
sql_host = xxxxxxxx
sql_user = root
sql_pass = xxxxxx
sql_db = kindle_law
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT law_id as id, law_id, cat_id, create_time, title, descriptions FROM kl_tool_law_articles
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = law_id #从SQL读取到的值必须为整数
sql_attr_timestamp = create_time #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM kl_tool_law_articles WHERE law_id=$id #命令行查询时,从数据库读取原始数据信息
}
source mysql02
{
type = mysql
sql_host = xxxxxxxxx
sql_user = root
sql_pass = xxxxxx
sql_db = kindle_law
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT law_id as id, law_id, create_time, title, descriptions FROM kl_tool_case_articles
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = law_id #从SQL读取到的值必须为整数
sql_attr_timestamp = create_time #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM kl_tool_case_articles WHERE law_id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的source名称
path = G:/coreseek/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 = G:/coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
#index定义
index mysql02
{
source = mysql02 #对应的source名称
path = G:/coreseek/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 = G:/coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
#全局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 = G:/coreseek/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = G:/coreseek/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = G:/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
2,配置完成后 ,点击开始按钮输入cmd ,右键cmd.exe 以管理员身份运行,cd到解压出来的coreseek文件下
3.建立索引
进入coreseek文件下 输入
bin\indexer -c etc\csft_mysql.conf --all 生成索引
bin\indexer -c etc\csft_mysql.conf --all --rotare 重新生成索引
3. 测试查询
输入 bin\search -c etc\csft_mysql.conf xxxx
xxxx 为要查询的内容
dos下最好只查询英文内容,因为dos下由于编码原因,不一定能查询出来。
dos下的查询主要是起到测试的作用,真正的查询应该还是要通过调用API
4.searchd 安装成为一个服务(之后可以关闭dos窗口使用)
.\bin\searchd.exe -c .\etc\csft_mysql.conf
安装完成就可以在调用api了
!!!如果配置多表,只需要多个数据源scource 和多个索引index即可 配置如上
使用:
1,tp5中调用 sphinxapi.php 文件放在了extend 如下:
2,代码显示
public function searchlist(Request $request){
$params = $this->get_post_request();
// case:案例;law:法规;judicialView:司法观点
Loader::import('sphinxapi','../extend/');
$sphinx = new \SphinxClient();
$sphinx->SetServer('127.0.0.1',9312);//链接
//sphinxapi 全文检索
isset($params['keyword']) ? $keyword = $params['keyword'] : $keyword = '测试';
//SPH_MATCH_ALL, 匹配所有查询词(默认模式); SPH_MATCH_ANY, 匹配查询词中的任意一个; SPH_MATCH_EXTENDED2, 支持特殊运算符查询
$sphinx->setMatchMode(SPH_MATCH_ALL);
$sphinx->setMaxQueryTime(30); //设置最大搜索时间
$sphinx->SetArrayResult(false); //是否将Matches的key用ID代替
$sphinx->SetSelect ( "*" );
//设置返回信息的内容,等同于SQL
$sphinx->SetRankingMode(SPH_RANK_BM25);
$sphinx->SetLimits ( 0, 10, 1000, 0 ); //设置结果集偏移量 SetLimits
$result = $sphinx->query($keyword,"mysql02"); #[coreseek]关键字,[mysql]数据源source
// halt($result);
$err = $sphinx->GetLastError();
if(!isset($result['matches'])){
echo '未检索到内容';
exit;
}
$ids = join(',',array_keys($result['matches']));
$datalist = db('tool_case_articles')->whereIn('law_id',$ids)->select();
// dump($datalist);exit;
$opts=array(
"before_match"=>"<font color='red'>",
"after_match"=>"</font>",
);
foreach($datalist as $k=>$v){
$final[]=$sphinx->buildExcerpts($v,"mysql02",$keyword,$opts);
/*echo "标题:".$final['2']."<br>";
echo $final[9].'<hr>';*/
}
$return_data = [
'pageIndex' => $params['pageIndex']??1,
'pageSize' => $params['pageSize'] ?? 10,
'total' => $result['total'], //本次返回数量
'total_found' => $result['total_found'], //系统总数量
'time' => $result['time'] ,
'itemts' => $final,
];
$this->result($return_data, '2000', '法律法规搜索', 'json');
}