gnugat/search-engine
最新稳定版本:v0.3.0
Composer 安装命令:
composer require gnugat/search-engine
包简介
Component that tries to help you get the Query part in CQRS right
README 文档
README
A Proof Of Concept demonstrating how to handle Interrogatory Messages (Query in CQRS).
The Command / Query Responsibility Segregation principle explains that Imperative and Interrogatory messages shouldn't be mixed together.
Note: Learn more about the different messaging flavours.
Usually imperative messages are handled using the CommandBus pattern, which leaves us with the following question: how Interrogatory Messages should be handled?
This component tries to explore one of the possible answers: a SearchEngine that would try to return results matching a given criteria.
Caution: this component does not provide actual SearchEngine features, if you're looking for one you should rather have a look at ElasticSearch, Solr, etc.
Installation
Download SearchEngine using Composer:
composer require gnugat/search-engine:^0.3
You'll also need to choose one of the following implementations:
- PommSearchEngine, a Pomm Foundation implementation
- hey you just met this library, and this is crazy, but it has interfaces, so implement them, maybe?
Other possible implementations: PDO, Doctrine DBAL,
Doctrine ORM, etc. In the tests directory you'll find an Array implementation example.
More information about implementations
Usage
SearchEngine expects a Criteria object which describes:
- the resource to query
- relations to embed
- filters to apply
- orderings instructions
- pagination parameters
It can be built from query parameters as follow:
// ... $criteria = $criteriaFactory->fromQueryParameters('blog', [ // Filters 'title' => 'IG', 'author_ids' => '1,3', // Pagination 'page' => '2', 'per_page' => '3', // Ordering 'sort' => 'author_id,-title', // Relation embeding 'embed' => 'author', ]); print_r(iterator_to_array( $searchEngine ->match($criteria) ->take( $criteria->paginating->offset, $criteria->paginating->itemsPerPage ) ->getIterator() ));
In a web context, this $queryParameters array could actually be $_GET, corresponding to the following URL:
/v1/blogs?title=IG&author_ids=1,2&page=1&per_page=3&sort=author_id,-title&embed=author
The result could be the following:
[
'items' => [
[
'id' => 1,
'title' => 'Big Title',
'author_id' => 1,
],
[
'id' => 2,
'title' => 'Big Header',
'author_id' => 2,
],
],
'page' => [
'current_page' => 1,
'per_page' => 3,
'total_elements' => 2,
'total_pages' => 1,
],
]
Further documentation
You can see the current and past versions using one of the following:
- the
git tagcommand - the releases page on Github
- the file listing the changes between versions
You can find more documentation at the following links:
Next readings:
gnugat/search-engine 适用场景与选型建议
gnugat/search-engine 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 106 次下载、GitHub Stars 达 2, 最近一次更新时间为 2015 年 08 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「search engine」 「cqrs」 「Query Bus」 「interrogatory message」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 gnugat/search-engine 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 gnugat/search-engine 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 gnugat/search-engine 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel package to retrieve data from Google Search Console
Interfaces, Traits and Nominal Classes used by Domain Entities Implementing Domain Events
Indexed Search Autocomplete - Extends the TYPO3 Core Extension Indexed_Search searchform with an autocomplete feature.
A SilverStripe module to optimise the Meta, crawling, indexing, and sharing of your website content (forked from Cyber-Duck/Silverstripe-SEO)
Implementation of the transactional outbox pattern on top of rekalogika/domain-event
Abstraction Layer to index and search entities
统计信息
- 总下载量: 106
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 10
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-08-21