pedropuppim/psonic

PHP 客户端用于 Sonic 搜索引擎 - 从 ppshobi/psonic 分支而来

dev-master 2022-05-27 11:23 UTC

This package is auto-updated.

Last update: 2024-09-27 16:43:58 UTC


README

Build Status Scrutinizer Code Quality codecov

摘要

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

安装与使用

你需要一个正在运行的 Sonic 实例(本地或云端,端口 1491 应该可访问),PHP7+ 和 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 协议),我们称之为通道。有三种类型的通道

  • 摄入(通常提供数据索引(index)、删除索引(pop)和刷新操作)
  • 搜索(提供查询和建议操作)
  • 控制(提供集合控制操作,如数据合并)

基本术语

假设你正在存储来自电子商务网站的客户聊天记录。

  • 集合 - 包含你所有的消息/产品等...
  • - 你可能需要存储特定于用户的消息,以便集合可以包含一个或多个用户桶,以便搜索更具体,或者根据你的用例,你可以将所有消息放入一个桶中,并将其命名为 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安装

$ cd psonic && composer install

使用phpunit运行测试。

请随意发送pull请求。