rollerworks/search-dev

RollerworksSearch 单一开发(建议使用单独的包)

安装: 15

依赖: 0

建议者: 0

安全性: 0

星级: 109

观察者: 6

分支: 17

开放问题: 11

类型:项目

v2.0.0-BETA6 2024-09-18 09:21 UTC

README

关于 RollerworksSearch

RollerworksSearch 是一个强大的 PHP 搜索系统。旨在使 PHP 应用程序中的搜索尽可能简单和快速。

无论您是想在 SQL 数据库中搜索用户,还是想提供一个使用 ElasticSearch 后端的强大搜索系统,或者寻找一种用于抽象过滤器的途径。

⚠️ RollerworksSearch v2.0 尚未稳定,应预期会有向后兼容的更改。
如果您正在寻找一个稳定版本,请等待最终 v2.0 版本的发布。

关于复杂的数据结构呢?

复杂的数据结构不是问题,比如您的客户数据存储在“customer”表中,发票数据存储在其自己的表中,发票的详细信息有自己的表。

您不需要编写一个非常冗长的 SQL 查询,您的用户可以使用简单的 StringQuery 语法

invoice-price: > $20.00; invoice-row-label: ~*"my cool product"; customer-type: !consumer.

您使用单个条件在三个关系表中进行了搜索,语法友好。这只是开始,RollerworksSearch 可以与任何区域设置、自定义输入格式或存储系统一起工作。

搜索条件可以是您需要的简单或复杂,包括分组和嵌套以获得最佳结果。

功能

RollerworksSearch 提供了您从搜索系统期望的大部分功能,包括

  • 使用 StringQuery 格式的本地化输入处理;
  • 用户友好的格式验证;
  • 与 API-Platform 的集成;
  • 支持 Symfony 4.4 及以上版本(支持 Symfony Flex)。

并支持最受欢迎的存储系统。

安装和使用

如果您使用框架集成,请忽略以下说明。

阅读文档以获取完整说明和信息。

使用 Composer 安装 RollerworksSearch "核心" 库

$ composer install rollerworks/search

然后创建 SearchFactory 以开始。

use Rollerworks\Component\Search\Searches;
use Rollerworks\Component\Search\Exception\InvalidSearchConditionException;
use Rollerworks\Component\Search\Extension\Core\Type\TextType;
use Rollerworks\Component\Search\Extension\Core\Type\IntegerType;
use Rollerworks\Component\Search\Extension\Core\Type\ChoiceType;
use Rollerworks\Component\Search\Input\ErrorPathHumanizer;
use Rollerworks\Component\Search\Input\StringQueryInput;
use Rollerworks\Component\Search\Input\ProcessorConfig;

// The factory is reusable, you create it only once.
$searchFactory = Searches::createSearchFactory();

// Create a fieldset to inform the system about your configuration.
// Usually you will have a FieldSet for each data structure (users, invoices, etc).
$userFieldSet = $searchFactory->createFieldSetBuilder()
    ->add('firstName', TextType::class)
    ->add('lastName', TextType::class)
    ->add('age', IntegerType::class)
    ->add('type', ChoiceType::class, [
        'choices' => ['Consumer' => 'c', 'Business' => 'b'],
    ])
    ->getFieldSet('users');
    
// Now lets process a string query.
// Tip: the input processor is reusable.
$inputProcessor = new StringQueryInput();

try {
    // The ProcessorConfig allows to limit the amount of values, groups
    // and maximum nesting level. The defaults should be restrictive enough
    // for most situations.
    $processorConfig = new ProcessorConfig($userFieldSet);
    
    // The `process` method processes the input and produces 
    // a valid SearchCondition (or throws an exception when something is wrong).
    $condition = $inputProcessor->process('firstName: sebastiaan, melany;');
} catch (InvalidSearchConditionException $e) {
    // Each error message can be transformed to a localized version
    // using the Symfony Translator contract.
    
    $translator = ...; // \Symfony\Contracts\Translation\TranslatorInterface
    
    // Note: The ErrorPathHumanizer only works for the `StringQueryInput` input processor.
    $errorPathHumanizer = new ErrorPathHumanizer($translator);
    
    foreach ($e->getErrors() as $error) {
       echo '<span>' $errorPathHumanizer->humanize($error->path) .  ' </span><span>' . htmlentities($error->trans($translator), ENT_COMPAT | ENT_IGNORE, 'UTF-8') '</span>' . PHP_EOL;
    }
}

就是这样!$condition 包含了规范化数据格式中的搜索条件,可以在条件处理器(如 ElasticSearch)中使用,或者导出为 JSON 格式,以便在 URL 中更容易使用。

注意: RollerworksSearch 由多个单独的包组成(以保持架构简洁),“核心”包提供了开始所需的一切。

搜索(文档)存储需要安装额外的包。

关于验证呢?

每个字段类型都确保值转换为正确的格式,例如,日期输入会自动转换为 DateTimeImuttable 对象。

如果提供的输入不是整数,则期望整数的字段将失败。

要强制执行更严格的约束,如整数字段的最高值,您可以使用 Symfony Validator 扩展

资源

谁在背后支持 RollerworksSearch?

RollerworksSearch 由 Sebastiaan Stok 提供。

许可

RollerworksSearch 采用 MIT 许可证 发布。

类型和扩展主要受到 Symfony 表单组件的启发,并包含来自 Symfony 项目的大量代码。

支持

请使用问题跟踪器创建一个新 支持问题

注意: 请耐心等待,可能需要一些时间才能回答您的问题。 不要 ping 维护者。

贡献

这是一个开源项目。如果您想贡献,请阅读 贡献指南。如果您正在提交拉取请求,请遵循 提交补丁 部分的指南。

注意: RollerworksSearch 在一个单体仓库中开发,请不要向标记为 [只读] 的仓库提交拉取请求,谢谢。