coreseek实战(四):php接口的使用,完善php脚本代码

在上一篇文章 coreseeek实战(三)中,已经能够正常搜索到结果,这篇文章主要是把 index.php 文件代码写得相对完整一点点(过滤、权重设定等等很多设置仍然没有使用),同时记录一下在测试过程中出现的问题。

index.php代码稍微完善

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gbk" />
<title>coreseek中文全文搜索在php程序中的应用</title>
</head>
<body>
<h3><font color="blue">coreseek全文搜索在php程序中应用</font></h3>
<form action="index.php" method="post">
输入搜索的关键词:<input type="text" name="keyword" size="30" />
<input type="submit" name="sub" value="搜索" />
</form>
<hr />
<?php
echo "<pre />";
#引入接口文件,其实你懂的,就是一个类
require_once('sphinxapi.php');
if(isset($_POST['sub']) && $_POST['keyword'] != ''){
$keyword = trim($_POST['keyword']); //接收关键词 $sph = new SphinxClient(); //实例化 sphinx 对象
$sph->SetServer('localhost',9312); //连接9312端口
$sph->SetMatchMode(SPH_MATCH_ANY); //设置匹配方式
$sph->SetSortMode(SPH_SORT_RELEVANCE); //查询结果根据相似度排序
$sph->SetArrayResult(false); //设置结果返回格式,true以数组,false以PHP hash格式返回,默认为false /**
*关键词高亮显示,以及产生文本摘要
*BuildExcerpts($docs, $index, $words, $opts=array())
*参数(包含文档内容的数组,索引名,关键词,高亮参数)
**/
$opts = array(
"before_match" => "<font color='red'>", //关键词高亮开始的html代码
"after_match" => "</font>", //关键词高亮结束的html代码
"limit" => 100, //摘要最多包含的符号数,默认256
"around" => 3, //每个关键词左右选取的词的数目,默认为5
); $result = $sph->Query($keyword,'dede');//执行搜索操作,参数(关键词,[索引名])
if(!array_key_exists('matches', $result)){ //如果没有匹配结果,直接返回
echo "搜索无结果";
return;
}
$arr_key = array_keys($result['matches']);
//获取到匹配文章的ID
$ids = implode(',',$arr_key); //数组转成字符串
echo "<font color='blue'>按相关性排序id(结果数:",count($arr_key),"):</font>",$ids,"<hr />"; //连接数据库
$mysqli = new Mysqli('localhost','root','123456','dedecmsv57gbksp1');
$mysqli->query('set names gbk');
$query = "select typeid,id,title,description from dede_archives where id in({$ids}) order by find_in_set(id,'{$ids}')";
$res = $mysqli->query($query);
echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>文章栏目</th><th>文章id</th><th>标题</th><th>描述</th></th></tr>"; //搜索词没有高亮显示
/* while($row = $res->fetch_assoc()){
echo "<tr><td>",$row['typeid'],"</td><td>",$row['id'],"</td><td>",$row['title'],"</td><td>",$row['description'],"</td></tr>";
} */ //使用高亮显示代码
while($row = $res->fetch_assoc()){
$result = $sph->BuildExcerpts($row, 'dede', $keyword, $opts);
if(!$res){
die("Error:".$sph->GetLastError());
}
echo "<tr><td>",$result[0],"</td><td>",$result[1],"</td><td>",iconv('utf-8','gbk',$result[2]),"</td><td>",iconv('utf-8','gbk',$result[3]),"</td></tr>";
} echo "</table>";
}
?>

存在的问题总结:

(1)最严重的就是速度问题:使用高亮函数 buildExcerpts() 后,查询速度变得异常之慢,需要10~20秒这样;而不使用高亮,基本上 1 秒左右出结果。

(2)高亮之后,从数据库读取出来的内容为乱码,只能做转换。但数据库编码为gbk,且文档编码、header设置的编码也已经设置为gbk,不知道是哪里的编码出了问题。

(3)使用 php api 接口时,不解的是,有时候搜索无结果;而折腾一下,索引重建、searchd服务重启等等之后,便可正常(关键是有时候这些操作都搞过一遍,还是不行,搞几次却好了,灰常的郁闷)

coreseek实战(四):php接口的使用,完善php脚本代码的更多相关文章

  1. coreseek实战(三):全文搜索在php中应用(使用api接口)

    coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...

  2. coreseek实战(一):windows下coreseek的安装与测试

    coreseek实战(一):windows下coreseek的安装与测试 网上关于 coreseek 在 windows 下安装与使用的教程有很多,官方也有详细的教程,这里我也只是按着官方提供的教程详 ...

  3. Python爬虫实战四之抓取淘宝MM照片

    原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...

  4. SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  5. ②SpringCloud 实战:引入Feign组件,完善服务间调用

    这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...

  6. ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪

    这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  7. gRPC学习之四:实战四类服务方法

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. coreseek实战(二):windows下mysql数据源部分配置说明

    coreseek实战(二):windows下mysql数据源部分配置说明 关于coreseek在windows使用mysql数据源的配置,以及中文分词的详细说明,请参考官方文档: mysql数据源配置 ...

  9. Java集合框架的四个接口

    接口 [四个接口  collection  list  set  map 的区别] collection 存储不唯一的无序的数据 list 存储有序的不唯一的数据 set   存储无序的唯一的数据 m ...

随机推荐

  1. git 新建分支/切换分支/合并分支 使用方法

    我的源码在 阿里云的git上存储着呢 1. 在 code.aliyun.com 上 新建分支  fixbug 2. 通过在 phpstorm中 右键项目>>VSC>>Git&g ...

  2. C# using 三种使用方式

    http://www.cnblogs.com/fashui/archive/2011/09/29/2195061.html 1.using指令. using 命名空间名字.例如: using Syst ...

  3. 互斥锁(Mutex)

    互斥锁(Mutex)互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它.互斥锁可适用于一个共享资源每次只能被一个线程访问的情况 函数://创建一个处于未获取状态的互斥锁Public ...

  4. C++模板元编程 - 函数重载决议选择工具(不知道起什么好名)完成

    这个还是基于之前实现的那个MultiState,为了实现三种类型“大类”的函数重载决议:所有整数.所有浮点数.字符串,分别将这三种“大类”的数据分配到对应的Converter上. 为此实现了一些方便的 ...

  5. 手机app测试框架

    1.冒烟测试 一般使用mokey或其他自动化测试工具进行测试,保证软件的健壮性和可测性. 2.安装.卸装测试 直接在真机上安装.卸装(adb install 或 adb push到手机上直接安装) 第 ...

  6. c/c++ 对象内存布局

    一.对象内存查看工具 VS 编译器 CL 的一个编译选项可以查看 C++ 类的内存布局,非常有用.使用如下,从开始程序菜单找到 Visual Stdio 2012. 选择 VS 的命令行工具,按如下格 ...

  7. QlikView TEXT控件固定显示图片

    QlikView 的Text控件不仅可以用来展示文本也可以用来展示图片. 数据表 2个列,一个是 关联字段(Country),另外一个保存图片物理路径. TEXT控件固定显示图片 ,编辑控件表达式 = ...

  8. 织梦(dedecms)系统常用全局变量调用标签及路径

    {dede:global.cfg_memberurl/} 指的是会员中心 对应/member/目录 {dede:global.cfg_cmsurl/} 对应的是网站根目录/ {dede:global. ...

  9. HTML中常用meta整理

    < meta > 元素 定义 meta标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其 ...

  10. win7出现无法连接到代理服务器的错误,不能上网的问题的解决

    今天晚上突然停电,等我打开电脑发现不然上网,用google浏览器出现这个错误: 用IE诊断错误如下: 说是不能连到代理服务器,但是我没有连接到代理服务器啊,但是我的QQ能登,就是不能用浏览器上网,经过 ...