pedropuppim / psonic
PHP 客户端用于 Sonic 搜索引擎 - 从 ppshobi/psonic 分支而来
Requires
- php: ^7.2|^8.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^9.0
This package is auto-updated.
Last update: 2024-09-27 16:43:58 UTC
README
摘要
Sonic 是一个由 crisp.chat 团队构建的超级快速的自动完成引擎,crisp.chat 是一个客户参与平台。它是用 Rust 编写的,并官方支持 JavaScript 客户端,但如果你想通过 PHP 使用 Sonic,这就是你可以查找的库。完全单元测试,并遵循现代编码标准,提供了一个干净的 API 来与 Sonic 交互。
安装与使用
你需要一个正在运行的 Sonic 实例(本地或云端,端口 1491 应该可访问),PHP7+ 和 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 协议),我们称之为通道。有三种类型的通道
- 摄入(通常提供数据索引(index)、删除索引(pop)和刷新操作)
- 搜索(提供查询和建议操作)
- 控制(提供集合控制操作,如数据合并)
基本术语
假设你正在存储来自电子商务网站的客户聊天记录。
集合
- 包含你所有的消息/产品等...桶
- 你可能需要存储特定于用户的消息,以便集合可以包含一个或多个用户桶,以便搜索更具体,或者根据你的用例,你可以将所有消息放入一个桶中,并将其命名为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安装
$ cd psonic && composer install
使用phpunit
运行测试。