关于php编写app搜索接口

Xunsearch是一个开源免费、高性能、多功能简单易用的专业全文检索技术方案,官方文档写的对新手不太友好,只能慢慢琢磨,以下是我稍微整理的资料

迅搜手册

迅搜官网文档
迅搜w3school手册
关于安装,请看迅搜官网文档。

关于迅搜配置

项目目录下会有xunsou这个文件夹,其目录下有app文件夹,里面就是配置搜索的索引,文件名后缀是.ini结尾,其结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
project.name = 项目名(最好是数据库的表名)
project.default_charset = utf-8
server.index = 127.0.0.1:8383
server.search = 127.0.0.1:8384

[表id]
type = id

[表title字段名]
type = title

[add_time]
type = numeric

其中tokenizer分词器是很重要的,比如一个字作分词xlen([1]) ,项目配置详解

编写api接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function search_club()
{
include (ROOT_PATH . '/xunsou/lib/XS.php');
$keyword = $_GET['keyword']; //获取搜索的字段
$xs = new XS('迅搜配置的project.name');
$search = $xs->search; // 获取搜索对象
$search->setLimit(20);
$docs = $search->setQuery( $keyword)->search(); // 搜索 ‘ 测试’

$data1=array();
//搜索返回的是一个对象,所以用foreach
foreach ($docs as $key=>$val) {
$data1[$key]['id'] = $val->id;
$data1[$key]['title'] = $val->title;
}
$this->json_result($data1);
}

服务器需要配置

导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建

  • util/Indexer.php —rebuild —source=mysql://root:pass@localhost/dbname —sql=”SELECT * FROM tbl_post” —project=迅搜配置的项目名称

例如导入的表为商品,需要在服务器进行定时任务

输入crontab -e 打开脚本

例如一分钟进行一次脚本

1
*/1 * * * * util/Indexer.php --rebuild --source=mysql://root:pass@localhost/dbname --sql="SELECT * FROM tbl_post" --project=迅搜配置的项目名称