lmc / cqrs-solr
一个包含帮助进行 Solr 查询和命令的基础实现库
Requires
- php: ^8.2
- ext-json: *
- ext-mbstring: *
- lmc/cqrs-types: ^3.2
- nelmio/solarium-bundle: ^5.0
- solarium/solarium: ^6.2.3
Requires (Dev)
- ergebnis/composer-normalize: ^2.5
- lmc/coding-standard: ^3.3
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.4
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^11.0.4
README
一个包含帮助进行 Solr 查询和命令的基础实现库。此库是 CQRS/Bundle 的扩展,并添加了对
Solarium
请求的支持。
目录
安装
composer require lmc/cqrs-solr
注意:它还需要 Solarium 和 Solarium bundle,这些库直接由本库要求。
查询
查询是一个请求,用于获取数据而不进行任何更改。更多信息
允许并建议使用 InjectSolrClientInterface
与 Solr 查询一起使用,这样您就不必担心 Solarium Client
,您将自动获得它。
AbstractSolrQuery
一个基础的 Solr 查询,它抽象并预定义了此类查询中最常用的功能。
它实现了 ProfileableInterface
和 CacheableInterface
功能。
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个具有Name
和Age
字段的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
- 所有功能的基接口,它添加了
getFields
和getNumberOfRows
基方法。|
- 所有功能的基接口,它添加了
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