ppshobi/psonic

Sonic 搜索引擎的 PHP 客户端

v2.1.0 2022-11-01 11:37 UTC

README

codecov

.github/workflows/tests.yml

摘要

Sonic 是一个由 crisp.chat 团队构建的超快自动补全引擎,crisp.chat 是一个客户参与平台。它使用 Rust 编写,并官方支持 JavaScript 客户端,但如果你想通过 PHP 使用 sonic,这个库就是你要找的。完全单元测试,遵循现代编码标准,并提供一个干净的 API 来与 sonic 交互。

安装与使用

你需要一个运行中的 sonic 实例(本地或云上,端口 1491 应该可访问),PHP 7+ 和 composer 来使这个库工作。有关安装 sonic 的更多信息,请参阅 此处

  • 转到你的项目目录
  • 执行 composer require ppshobi/psonic 一旦安装完成,你应该可以像以下这样使用库

API 文档

完整的 API 文档

用法

一旦你有了 psonic,你就可以访问 ClientChannel 类,每个通道实例都需要一个新的客户端实例,因为 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 - 你可能需要存储特定于用户的消息,以便集合可以包含一个或多个用户桶,以便搜索更具体,或者根据你的用例,你可以将所有消息放在一个名为 defaultgeneric 等...的桶中。
  • 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运行测试。

请随意发送pull请求。