Coreseek(Sphinx)简单应用及在LAMP中的注意事项

在本文中我将给大家带来Coreseek(Sphinx)在PHP中的一个简单的例子、并在后面给大家讲一下Coreseek(Sphinx)在LAMP环境中的一些注意事项,比如searchd的开机启动呀,Sphinx实时索引啊。

有关coreseek(sphinx)在LAMP上的安装以及配置、使用大家请参考我之前的两篇博客:

CentOS 7下安装Coreseek中文检索引擎 

LAMP+Coreseek中文检索引擎使用详解 

PS:这里用到的数据库和数据表都是在前面两篇博客中创建的。

一、coreseek+mysql+php 的一个简单使用:模拟搜索引擎 1、创建搜索首页:index.php <html> <head> <title>测试搜索</title> </head> <body> <h1>简单PHP搜索引擎</h1> <form action='find.php' method='post'> 请输入搜索关键字:<input type='text' name='find'><br> <input type='submit' value='提交搜索关键字'> </form> </body> </html>

效果:

这里写图片描述

2、处理并显示搜索结果页面:find.php <html> <head><title>Result</title></head> <body> <h1>搜索结果展示</h1> <?php $keyword = $_POST['find']; $sphinx = new SphinxClient(); //设置主机和端口号 $sphinx->SetServer("localhost",9312); //搜索匹配方案 $sphinx->SetMatchMode(SPH_MATCH_ANY); //query('a','b');在b索引中搜索关键字a,*表示所有索引 $result = $sphinx -> query("$keyword","*"); $ids = join(',',array_keys($result['matches'])); $mysql = new mysqli('localhost','root','zhongjin','test'); $mysql->query("SET NAMES utf8"); $sql = "SELECT * FROM documents WHERE id IN({$ids})"; $res = $mysql->query($sql); $count = $res->num_rows; //该数组设置搜索关键字的显式样式 /* $opts = array( 'before_match' => "<font>", 'after_match' => "</font>", ); */ $opts = array( 'before_match' => "<button>", 'after_match' => "</button>", ); if($count > 0){ while($ret = $res->fetch_assoc()){ //使搜索关键字高亮显示 $row = $sphinx -> buildExcerpts($ret,'main',$keyword,$opts); echo "标题:{$row[4]}<br>"; echo "内容:{$row[5]}"; echo "<hr>"; } echo "搜索结果{$count}条。"; }else{ echo "无搜索结果!"; } ?> </body> </html>

当我搜索 ’LSGO实验室‘ 时,效果如下:

这里写图片描述

这就是sphinx+MySQL+php的一个简单应用,以及使搜索关键字高亮显示。

二、sphinx的实时索引 1、为什么要实现sphinx实时索引?

看看 coreseek 增量索引模拟实时索引 ,在这里就引用该篇文章的内容:

有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个论坛有1000000个已经归档的帖子,但每天只有1000个新帖子。

在这种情况下可以用所谓的“主索引+增量索引”(main+delta)模式来实现“近实时”的索引更新。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b997b5919a2b426061f6e60f02b6553a.html