lmc/cqrs-solr

一个包含帮助进行 Solr 查询和命令的基础实现库

3.1.0 2024-03-06 13:23 UTC

This package is auto-updated.

Last update: 2024-09-06 14:33:40 UTC


README

cqrs-types Latest Stable Version Tests and linting Coverage Status

一个包含帮助进行 Solr 查询和命令的基础实现库。此库是 CQRS/Bundle 的扩展,并添加了对 Solarium 请求的支持。

目录

安装

composer require lmc/cqrs-solr

注意:它还需要 SolariumSolarium bundle,这些库直接由本库要求。

查询

查询是一个请求,用于获取数据而不进行任何更改。更多信息

允许并建议使用 InjectSolrClientInterface 与 Solr 查询一起使用,这样您就不必担心 Solarium Client,您将自动获得它。

AbstractSolrQuery

一个基础的 Solr 查询,它抽象并预定义了此类查询中最常用的功能。

它实现了 ProfileableInterfaceCacheableInterface 功能。

AbstractSolrSelectQuery

一个基础的 Solr Select 查询,它抽象并预定义了此类查询中最常用的功能。

它扩展了基础的 AbstractSolrQuery 并预定义了一些抽象方法。它还添加了 InjectSolrClientInterface 功能,因为它需要一个 Solarium Client 来创建 Select Request

BuilderPrototypeQuery

这是一种特殊的 SolrSelectQuery 类型,它也扩展了 AbstractSolrSelectQuery 并实现了使用 QueryBuilder 应用程序prepareSelect 方法。

这是一个由 QueryBuilder 为您创建的查询。

查询处理器

它负责处理特定的查询请求并将结果传递给 OnSuccess 回调。更多信息

Solr 查询处理器

此处理器支持 Lmc\Cqrs\Solr\ValueObject\SolrRequest(见 SolrRequest)并将其处理为 Solarium\Core\Query\Result\ResultInterface

它还准备了一个实现了 InjectSolrClientInterface 的查询,通过将 Solarium Client 注入到查询中,因此您不需要自己将 Solarium Client 注入到查询中。

值对象

SolrField

它是用户传递给 Solr 的任何数据(例如,在查询或 Solr 返回的字段列表中)的表示。

SolrRequest

这是一个简单的值对象,包含一个 Abstract Solarium Query 和可选的 Solr 端点

查询构建器

查询构建器是在 Solarium Select 查询设置之上的一种抽象。

想法是,您只是将用于选择的、存储在实体中的数据。实体代表您想要选择的内容以及如何选择。根据该实体实现的接口,数据被传递到选择查询中。

查询构建器构建一个BuilderPrototypeQuery,它是一个QueryInterface的实例,可以在CQRS/QueryFetcher中使用,并具备所有支持的功能。

示例

想象一下,你需要通过搜索输入选择30个具有NameAge字段的Persons,这些数据存储在Solr中,你可能需要像这样

$searchInput = $_GET['search'];

$selectPersons = $client->createSelect();
$selectPersons->getEDisMax()->setQueryFields('name^100 age^50');
$selectPersons->setQuery($searchInput);
$selectPersons->setNumberOfRows(30);

$result = $client->execute($selectPersons);

使用直接Solarium使用时,你需要自己创建一个选择查询并记住所有设置项。

现在查询构建器提供了一个预定义的应用器,它知道如何构建选择查询,只需提供选择查询的数据即可。

上面的示例使用查询构建器可能看起来像这样

class PersonSearch implements FulltextInterface
{
    private string $searchInput;

    public function __construct(string $searchInput)
    {
        $this->searchInput = $searchInput;
    }

    public function getKeywords(): array
    {
        return explode(' ', $this->searchInput);
    }

    public function getNumberOfRows(): int
    {
        return 30;
    }

    public function getQueryFields(): array
    {
        return [
            'name^100',
            new SolrField('age', '', 0, 50),     // you can also use a SolrField value object, so you don't need to remember how is a prioritized value built
        ];
    }

    public function isEDisMaxEnabled(): bool
    {
        return true;
    }

    public function useEDisMaxGlobally(): bool
    {
        return true;
    }

    // Note: there are more methods, you need to implement, but we want to keep this example simple as possible. If you don't need other functionality, simply return null or empty variant from a method.
}

$searchInput = $_GET['search'];

$selectPersonsEntity = new PersonSearch($searchInput);
$selectPersonsQuery = $queryBuilder->buildQuery($selectPersonsEntity);

$result = $queryFetcher->fetchAndReturn($selectPersonsQuery);

实体接口

它是一个定义接口,用于指定你希望查询拥有的特定功能集。

注意:它不是Solr/Solarium选择功能的完整集合,只是我们最常用的功能。

  • EntityInterface
    • 所有功能的基接口,它添加了getFieldsgetNumberOfRows基方法。|
  • FacetsInterface
  • FilterInterface
  • FiltersInterface
  • FulltextBigramInterface
  • FulltextBoostInterface
  • FulltextInterface
  • GroupingFacetInterface
  • GroupingInterface
  • ParameterizedInterface
  • SortInterface
  • StatsInterface

应用器

应用器是一个服务,可以根据实现的接口将一组特定数据应用到Solarium选择查询中。它必须实现ApplicatorInterface

如果你想要混合功能或者简单地使用还没有应用器的功能,你可以实现自己的应用器。

ApplicatorInterface

它是一个接口,所有应用器都必须实现。它指定当前应用器支持哪个实体,并且可以将其数据应用到Solarium请求中。如果值为空,它应该能够跳过设置值。

应用器工厂

它是一个包含所有定义应用器的服务,其目的是返回支持给定实体的所有应用器。它在QueryBuilder内部使用,以获取需要在选择查询上应用的应用器列表。

所有应用器的列表

  • EntityApplicator
  • FacetsApplicator
  • FilterApplicator
  • FiltersApplicator
  • FulltextApplicator
  • FulltextBigramApplicator
  • FulltextBoostApplicator
  • GroupingApplicator
  • GroupingFacetApplicator
  • ParameterizedApplicator
  • SortApplicator
  • StatsApplicator