novactive / ezalgoliasearchengine
Novactive eZ Algolia Search Engine是一个eZ Platform捆绑包,用于提供Algolia搜索集成。
Requires
- php: ^7.3
- ext-dom: *
- ext-json: *
- ext-openssl: *
- ext-pdo: *
- algolia/algoliasearch-client-php: ^2.7
Requires (Dev)
- fzaninotto/faker: ^1.9
- novactive/ezextrabundle: ^3.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-19 11:38:50 UTC
README
这个仓库是我们所说的“子树分割”:主仓库中一个目录的只读副本。它被Composer用于允许开发者依赖特定的捆绑包。
如果您想报告或贡献,请改为在主仓库中打开问题:[https://github.com/Novactive/Nova-eZPlatform-Bundles](https://github.com/Novactive/Nova-eZPlatform-Bundles)
文档可以通过此仓库中的.md
文件获取,但也打包在这里:[https://novactive.github.io/Nova-eZPlatform-Bundles/master/AlgoliaSearchEngine/README.md.html](https://novactive.github.io/Nova-eZPlatform-Bundles/master/AlgoliaSearchEngine/README.md.html)
Novactive eZ Algolia Search Engine是一个eZ Platform捆绑包,用于提供Algolia搜索集成,使您可以使用Algolia搜索引擎索引数据并进行搜索。
得益于以下3个主要功能
- eZ仓库搜索服务处理器实现:所有由eZ Platform用于检索内容和位置的用例都由Repository Search Service在幕后管理。此捆绑包实现了所有访问者,它们将eZ查询实例(包括标准、排序子句、分类构建器)转换为发送到Algolia的请求。
- Algolia PHP客户端集成:内容项会自动索引,如果需要,您可以直接绕过SearchService执行Algolia查询。如果需要,可以将结果注入到
Content
或Location
。 - Algolia前端:Algolia的一个主要优点是他们提供的用于使用前端技术执行/实现搜索的前端组件。简化开发并提供惊人的性能。此捆绑包提供了一个使用React JS、无样式和Twitter Bootstrap的集成示例。
安装
要求
- eZ Platform 3.1+
- PHP 7.3
安装步骤
将以下内容添加到您的composer.json中,并运行composer update novactive/ezalgoliasearchengine
以安装依赖项
# composer.json "require": { "novactive/ezalgoliasearchengine": "^1.0.0" }
JavaScript依赖项
cd ezplatform
yarn add --dev algoliasearch react react-collapsible react-dom react-instantsearch-dom
注册捆绑包
如果Symfony Flex尚未这样做,请在config\bundles.php
文件中激活捆绑包。
// config\bundles.php return [ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], ... Novactive\Bundle\eZAlgoliaSearchEngine\NovaEzAlgoliaSearchEngine::class => ['all' => true], ];
添加路由
_novaezalgoliasearchengine_routes: resource: '@NovaEzAlgoliaSearchEngine/Resources/config/routing.yaml'
环境变量
应将SEARCH_ENGINE
环境变量设置为algolia
配置
nova_ezalgoliasearchengine: system: default: index_name_prefix: PREFIX app_id: APPLICATION_ID api_secret_key: ADMIN_API_KEY api_search_only_key: SEARCH_ONLY_PAI_KEY license_key: "CONTACT NOVACTIVE: direction.technique@novactive.com to get your trial" webpack_encore: builds: nova_ezalgolia: "%kernel.project_dir%/public/assets/nova_ezalgolia/build" framework: assets: packages: nova_ezalgolia: json_manifest_path: '%kernel.project_dir%/public/assets/nova_ezalgolia/build/manifest.json'
应在https://www.algolia.com/上创建Algolia应用程序以检索应用程序ID和API密钥。它们可以在Algolia仪表板的
API密钥
页面上找到。
安装包后,应运行以下命令以在Algolia上初始化索引并设置搜索属性、排序索引和分类
bin/console nova:ez:algolia:indexes:setup
用法
查询标准
在eZ查询内部创建的所有标准(作为过滤器或查询字段)都转换为Algolia过滤器字符串,如下所示:
doc_type_s:content AND (content_type_identifier_s:"article")
标准的限制
一些主要的标准尚未实现
- 兄弟(即将推出)
- 对象状态标识符(即将推出)
- 用户邮箱(即将推出)
- 用户ID(即将推出)
- 用户登录(即将推出)
- 是否基于用户(即将推出)
- 是否启用用户(即将推出)
- 地图位置距离
用户相关条件尚未实现,因为它们大多数已包含在用户元数据条件中。
地图位置距离条件尚未实现,因为Algolia地理位置过滤器选项不允许我们在同一文档中管理多个此类字段。可以通过Algolia搜索方法的特定请求选项进行位置过滤。以下是一个示例
$query->setRequestOption('aroundLatLng', '37.7512306, -122.4584587'); $query->setRequestOption('aroundRadius', 3000);
关于此主题的文档可以在此处找到这里。
默认情况下, Algolia文档已经包含了具有地图位置字段的内容的_geoloc属性。
其他约束在逻辑运算符中。它们是
- 全文条件不能在逻辑非或逻辑或运算符中,因为它已移动到Algoalia的查询字符串请求中。Algolia就是这样工作的。
- AND运算符不能在逻辑非条件中;
- AND/OR运算符不能在逻辑或条件中。
有关Algolia上特定布尔过滤器的更多信息,请参阅这里。
有关如何工作的完整Algolia信息可以在这里找到。
排序
Algolia的排序基于副本。每个副本都是一个具有特定配置的复制索引,该配置指定了按哪些属性对文档进行排序。用于生成副本的属性可以在attributes_for_replicas
配置参数中设置。
当使用eZ查询时,分配给查询实例的sortClauses
字段将转换为副本密钥。
重新索引
所有数据(内容项和位置项)都通过bin/console ezplatform:reindex
命令推送到Algolia索引。所有这些(除了在exclude_content_types参数中指定的或仅包括在include_content_types参数中的)都被转换为特定格式并通过saveObjects方法发送到Algolia。此外,一旦在Ez平台管理员仪表板上发布,允许的内容类型(包括或排除)的每个特定内容都会推送到索引中。
前端实现
带有/search
URL的搜索页面被在Bundle中实现的自定义搜索控制器覆盖。为此使用了特定的路由配置。
ezplatform.search: path: /search methods: ['GET'] defaults: _controller: 'Novactive\Bundle\eZAlgoliaSearchEngine\Controller\SearchController::searchAction'
带有React组件的前端实现源代码可以在search.jsx
文件中找到。所有主要小部件都包含在其中,可以用作实现示例。有关React InstantSearch组件的基本安装和小部件展示的信息也可以在文档中找到。
安全注意事项
为了限制API密钥的作用域,使用受保护的API密钥。受保护的API密钥只能从Algolia API密钥列表中的只读API密钥生成。此类API密钥用于执行搜索方法,以防止可能的对其他用户的恶意请求篡改,因此它在后端执行。
换句话说,根据当前用户权限,此组件查询Algolia,包括与权限相关的隐式过滤器,以避免数据泄露。
更多信息这里。
执行saveObjects方法以创建、更新或删除Ined条目时使用管理员API密钥。
高级用法
从索引中排除/包含内容类型
您可以选择包含或排除哪些内容类型在索引中。使用以下配置参数来排除或包含特定内容类型
nova_ezalgoliasearchengine.default.exclude_content_types
nova_ezalgoliasearchengine.default.include_content_types
首先检查include
参数,因此它具有优先级。默认情况下,除了用户和用户组之外,所有内容类型都保存到索引中。
还有以下参数
- 可搜索属性;
- 用于分组的属性;
- 要检索的属性;
- 用于副本(用于排序)的属性;
您可以在默认设置中查看发送到Algolia的属性默认列表。
要发送所有这些设置到Algolia,请使用bin/console nova:ez:algolia:indexes:setup
命令。
使用查询工厂生成自定义查询
如果您想创建可以通过搜索查询工厂服务(Novactive\Bundle\eZAlgoliaSearchEngine\Core\Search\SearchQueryFactory
)实现的更具体的自定义请求。使用它时,应手动指定所有请求参数,例如搜索词、过滤器、分组等,如下面的示例所示
$query = $this->searchQueryFactory->create( 'term', 'content_type_identifier_s:"article"', ['doc_type_s'] ); $query->setRequestOption('attributesToRetrieve', ['content_name_s']);
副本也可以手动指定
$query = $this->searchQueryFactory->create( '', 'content_language_codes_ms:"eng-GB"', ); $query->setReplicaByAttribute('location_id_i');
然后,创建的查询实例应传递给Novactive\Bundle\eZAlgoliaSearchEngine\Core\Search\Search
服务的一个方法,具体取决于搜索类型
- findContents
- findLocations
- find(用于原始搜索)。
还有一个事件可以让你调整工厂创建的
Query
。`Novactive\Bundle\eZAlgoliaSearchEngine\Event\QueryCreateEvent`