CaigouSearch 基于ngram分词的轻量PHP全文检索插件

简单易用最关键,菜狗搜索:https://github.com/rock365/caigou

这是一个基于ngram分词的PHP模糊搜索插件,且完全免费,对博客等中小型网站来说,绰绰有余,因为它是用PHP开发的,所以能跟PHP项目完美融合。

如果你对elasticsearch的语法比较了解,那么你很快就会上手,不了解也没关系,照着文档复制填写就行了,没有任何难度。

注意:id字段必须为整型递增

安装导入

在github中,将代码下载到本地的一个文件夹,然后引入

 require 'yourdirname/caigou/Caigou.php';

开始使用

创建mapping
// 实例化对象
//$indexName 索引库的名称 例如news
$Caigou = new \Caigou($indexName='news');

//检查是否存在此索引库
$is_index = $Caigou->checkIndex();
// 如果存在此索引库
if ($is_index) {
    //删除索引库
    $Caigou->delIndex();
}

//创建索引库
$Caigou->createIndex();
$mapping = [
    //索引库名称 例如news
    'name' => 'news',
    // 需要索引的字段 如果是数组,例如:['title','descr'] 则会自动拼接成一个字符串
    'columns' =>  'title';
    // 分隔符 可选 默认为空, 例如:【/ | , 】等,如果存在分隔符,则不会进行分词,直接以分隔符切分
    'separator' => '',
    
];
//将配置信息写入配置文件
$Caigou->createMapping($mapping);
导入数据
//导入数据

//实例化引擎
$Caigou = new \Caigou($indexName);

// 此处应该从数据库查询原始数据
// 必须存在“id”字段,只支持int递增类型
$resArr = [
    [
        'id' => 'XXX',
        'title' => 'XXX',
        'descr' => 'XXX',
    ],
    [
        'id' => 'XXX',
        'title' => 'XXX',
        'descr' => 'XXX',
    ],
    [
        'id' => 'XXX',
        'title' => 'XXX',
        'descr' => 'XXX',
    ]
];
foreach ($resArr as $v) {
    $Caigou->indexer($v);
}

//每组$resArr数据导入后,都要批量写入文件保存,请合理设置分批查询的$resArr数据量
$Caigou->batchWrite();

构建索引
// 导入数据
// ....
// $Caigou->batchWrite();

// 数据全部导入之后,接着执行这个命令
$Caigou->buildIndex();
开始搜索
//实例化引擎
$Caigou = new \Caigou($indexName); 

//开始搜索 $page 第几页 $listRows 每页多少条
$res = $Caigou->search($text,$page, $listRows);
//返回的是id集合
$resArr = $res['result'];
获取源数据

根据 $resArr 返回的 id,在mysql等数据库中获取源数据。

你可能感兴趣的:(php全文检索模糊搜索)