Download the PHP package szwsuny/ltsearch without Composer
On this page you can find all versions of the php package szwsuny/ltsearch. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Please rate this library. Is it a good library?
Informations about the package ltsearch
LtSearch - 轻量级搜索引擎
这是一个轻量级搜索引擎,适合中小型网站,仅仅实现快速搜索功能,索引数据量支持500W-1000W,最大勉强支撑3000W数据。
想法
一开始是需求一个小功能,能够实现搜索一句话,然后进行分词,查找到标题带有这些关键词的文章,反馈搜索信息,没有权重,模糊搜索,同义词功能。如果需要更为复杂的功能,建议使用其他大型搜索引擎。
算法
使用bitmap算法(不是位图算法),如果需要学习,请自行查找。索引倒序和Roaring中的bitmap索引(另外两个数组索引,增量索引,我没用)来实现核心功能。
依赖
* PHP >= 7
* SCWS (中文分词工具,通过修改 SplitWords.php来切换分词工具)
* REDIS (非必须,如果设置缓存类型为redis则需要redis扩展)
解释
- 搜索的索引建立只需要两个参数 1: 文档ID 2:被索引的内容
- 文档ID是一个数字类型,且不能重复,如果你使用在文章搜索上,建议直接使用文章ID作为文档ID.
- 搜索结果是没有各种排序的,所以结果采用的是文档ID倒序方式。
- 搜索结果返回一个包含所有文档ID的数组。建议缓存这个结果。
- 标红,请使用 SzwSuny\LT\Search\SplitWords 取得分词,后处理标红。
配置
Config.php 主要配置文件
/**
*存储的缓存方式,两种 分别为 文件方式和 REDIS方式,具体配置请参见配置文件。
*/
const STORAGE_TYPE = self::STORAGE_IS_FILE; //存储方式
/**
* 这里是索引采用的存储方式 分别为 32位 和 64位 int类型。如果你的服务器php支持64位可以设置为64.(建议32)
*/
const INDEX_UNIT_MAX = 32;
/**
* @brief 缓存结果有效时长,现有的搜索结果会缓存一段时间,单位:毫秒
*/
const RESULT_TTY = 10800;
使用方式
* 可以参考test目录
* 搜索前需要先建立索引
引入项目
require __DIR__ . '/../vendor/autoload.php'; //注意调整所在目录位置
use SzwSuny\LT\Search\LtSearch;
声明对象
$ltSearch = new LtSearch();
建立索引
$ltSearch->add(1,'这里是要被索引的文字'); //第一个参数 1 可以理解为文章ID,搜索结果数组中只会返回这个值。
修改索引
$result = $ltSearch->update(1,'这里是修改后要索引的文字'); //将ID=1的文档修改成新的文字
删除索引
$ltSearch->remove(2); //删除ID=2的文档索引
搜索
$result = $ltSearch->search('搜索内容',$words); //搜索结果将会返回符合条件的文档ID数组,$words为引用变量,值为分词结果数组
搜索分页
$resut = $ltSearch->searchPage('搜索内容',1,20,$words);
使用案例
PS:当前已提供分页方式
有好多人直接将结果在数据库中 in 。好几千或者上万数据。我想说活不是这么干的。
请大家了解一下 array_slice 函数,php内置的。此函数使用方式跟 mysql limit 差不多,使用此函数先取出第几页的多少条,然后将结果到数据库中in 这样效率很快。
比如结果集变量为 $result ,每页20条,取第一页。
$ids = array_slice($result,0,20);
第二页为
$ids = array_slice($result,20,20);
第三页为
$ids = array_slice($result,60,20);
然后将 $ids 到数据库中in。这样只取20条速度超级快。
放在最后,查询完的结果集可以放到redis中,查询的文字过一下md5加密当做redis的key,每次查询时候先去取一下redis如果没有在调用搜索功能。记得给key设置过期时间。
版本号说明
xx.xx.0 最后一位为0是正式版
xx.xx.1-99 这种属于测试版本
更新
2019年01月31日 1.1.0
发布正式版本
2019年01月31日 1.1.1
新增搜索结果分页,搜索内容分词返回
2019年01月31日 1.1.3
新增存储方式切换,支持redis和文件存储
新增搜索结果缓存一定时间
sunzhiwei 2019-1-29
All versions of ltsearch with dependencies
PHP Build Version
Package Version
Requires
php Version
>=7.0.0
The package szwsuny/ltsearch contains the following files
Loading the files please wait ....