ppshobi / psonic
Sonic 搜索引擎的 PHP 客户端
Requires
- php: ^7.3|^8.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^9.0
This package is auto-updated.
Last update: 2024-09-04 11:14:24 UTC
README
摘要
Sonic 是一个由 crisp.chat 团队构建的超快自动补全引擎,crisp.chat 是一个客户参与平台。它使用 Rust 编写,并官方支持 JavaScript 客户端,但如果你想通过 PHP 使用 sonic,这个库就是你要找的。完全单元测试,遵循现代编码标准,并提供一个干净的 API 来与 sonic 交互。
安装与使用
你需要一个运行中的 sonic 实例(本地或云上,端口 1491 应该可访问),PHP 7+ 和 composer 来使这个库工作。有关安装 sonic 的更多信息,请参阅 此处
- 转到你的项目目录
- 执行
composer require ppshobi/psonic
一旦安装完成,你应该可以像以下这样使用库
API 文档
用法
一旦你有了 psonic,你就可以访问 Client
和 Channel
类,每个通道实例都需要一个新的客户端实例,因为 sonic 不允许在同一连接中切换通道。有关 sonic 概念的更多信息,请参阅下文
索引
要索引几个对象到 sonic,请使用以下示例代码,确保你有在端口 1491 上运行的 sonic 实例
$ingest = new Psonic\Ingest(new Psonic\Client('localhost', 1491, 30)); $control = new Psonic\Control(new Psonic\Client('localhost', 1491, 30)); $ingest->connect('SecretPassword1'); $control->connect('SecretPassword1'); echo $ingest->push('messagesCollection', 'defaultBucket', "1234","hi Shobi how are you?")->getStatus(); // OK echo $ingest->push('messagesCollection', 'defaultBucket', "1235","hi are you fine ?")->getStatus(); //OK echo $ingest->push('messagesCollection', 'defaultBucket', "1236","Jomit? How are you?")->getStatus(); //OK echo $control->consolidate(); // saves the data to disk $ingest->disconnect(); $control->disconnect();
搜索/自动补全
要使用以下示例代码在索引上搜索
$search = new Psonic\Search(new Psonic\Client('localhost', 1491, 30)); $search->connect('SecretPassword1'); var_dump($search->query('messagesCollection', 'defaultBucket', "are")); // you should be getting an array of object keys which matched with the term "are" $search->disconnect();
要从索引中获取术语的自动补全/自动完成,请使用以下示例代码
$search = new Psonic\Search(new Psonic\Client('localhost', 1491, 30)); $search->connect('SecretPassword1'); var_dump($search->suggest('messagesCollection', 'defaultBucket', "sho")); // you should be getting an array of terms which matched the term "sho". Considering previous example and it should output "shobi" $search->disconnect();
基本的 sonic 概念
Sonic 更像一个 标识符索引
而不是一个 文档索引
。这意味着,如果查询匹配一些记录,它会给你匹配对象的标识符,而不是对象本身。你可能需要再次使用那些键查询实际的数据存储。请参阅下文中 sonic 使用的术语。有关 sonic 存储库的更多信息,请参阅 此处
通道
截至目前,Sonic 不提供 HTTP 端点,而是提供一个类似于 Redis 的 TCP 端点(他们称之为 RESP 协议),我们称之为通道。有三种类型的通道
- 摄取(通常提供数据索引(索引)、取消索引(pop)和刷新操作)
- 搜索(提供查询和建议操作)
- 控制(提供数据合并等集合控制操作)
基本术语
假设你正在存储来自电子商务网站的客户聊天。
collection
- 包含所有消息/产品等...bucket
- 你可能需要存储特定于用户的消息,以便集合可以包含一个或多个用户桶,以便搜索更具体,或者根据你的用例,你可以将所有消息放在一个名为default
或generic
等...的桶中。object
- 对象是数据库中实际数据的键,通常,对象键将是源数据的主键,如消息表的主键,这是当你从 sonic 索引中查询匹配一些记录时返回的。terms
- 这是你在 sonic 中保存的实际文本数据。有关 sonic 文档的更多信息
测试与贡献
在本地运行 sonic 的最佳方式是使用 docker
在终端运行以下命令。您应该有一个正在运行的Sonic实例。
$ docker run -d -p 1491:1491 -v /path/to/sonic.cfg:/etc/sonic.cfg -v /path/to/sonic/data/store:/var/lib/sonic/store/ valeriansaliou/sonic:v1.1.9
然后克隆此项目
$ cd ~ && git clone https://github.com/ppshobi/psonic.git
然后进入项目目录并运行composer install
$ cd psonic && composer install
使用phpunit
运行测试。