PHPackages                             szwsuny/ltsearch - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. szwsuny/ltsearch

ActiveLibrary[Search &amp; Filtering](/categories/search)

szwsuny/ltsearch
================

Lightweight Search Engine

1.1.3(7y ago)26MITPHPPHP &gt;=7.0.0

Since Jan 28Pushed 7y agoCompare

[ Source](https://github.com/szwsuny/LtSearch)[ Packagist](https://packagist.org/packages/szwsuny/ltsearch)[ RSS](/packages/szwsuny-ltsearch/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (3)Used By (0)

LtSearch - 轻量级搜索引擎
==================

[](#ltsearch---轻量级搜索引擎)

---

这是一个轻量级搜索引擎，适合中小型网站，仅仅实现快速搜索功能，索引数据量支持500W-1000W，最大勉强支撑3000W数据。

---

### 想法

[](#想法)

一开始是需求一个小功能，能够实现搜索一句话，然后进行分词，查找到标题带有这些关键词的文章，反馈搜索信息，没有权重，模糊搜索，同义词功能。如果需要更为复杂的功能，建议使用其他大型搜索引擎。

---

### 算法

[](#算法)

使用bitmap算法(不是位图算法)，如果需要学习，请自行查找。索引倒序和Roaring中的bitmap索引（另外两个数组索引,增量索引，我没用）来实现核心功能。

---

### 依赖

[](#依赖)

```
* PHP >= 7
* SCWS (中文分词工具，通过修改 SplitWords.php来切换分词工具)
* REDIS （非必须，如果设置缓存类型为redis则需要redis扩展）

```

---

### 解释

[](#解释)

1. 搜索的索引建立只需要两个参数 1: 文档ID 2:被索引的内容
2. 文档ID是一个数字类型，且不能重复，如果你使用在文章搜索上，建议直接使用文章ID作为文档ID.
3. 搜索结果是没有各种排序的，所以结果采用的是文档ID倒序方式。
4. 搜索结果返回一个包含所有文档ID的数组。建议缓存这个结果。
5. 标红，请使用 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

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2659d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/27332034?v=4)[孙志伟](/maintainers/szwsuny)[@szwsuny](https://github.com/szwsuny)

---

Top Contributors

[![szwsuny](https://avatars.githubusercontent.com/u/27332034?v=4)](https://github.com/szwsuny "szwsuny (26 commits)")

---

Tags

composer-packagesphpphp7searchsearch-enginephpsearchltSearch

### Embed Badge

![Health badge](/badges/szwsuny-ltsearch/health.svg)

```
[![Health](https://phpackages.com/badges/szwsuny-ltsearch/health.svg)](https://phpackages.com/packages/szwsuny-ltsearch)
```

###  Alternatives

[solarium/solarium

PHP Solr client

93532.7M97](/packages/solarium-solarium)[centamiv/vektor

A native PHP Vector Database implementation with strict binary storage and Zero-RAM overhead.

3418.5k2](/packages/centamiv-vektor)[omaressaouaf/query-builder-criteria

Define reusable query criteria for filtering, sorting, search, field selection, and includes in Laravel Eloquent models

282.4k](/packages/omaressaouaf-query-builder-criteria)[apicart/fql

Filter Query Language

1110.6k](/packages/apicart-fql)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
