markup / elasticsearch-bundle
一个提供与Elasticsearch SDK简单集成的Symfony扩展包,同时也提供Web分析器信息。
Requires
- php: ^7.1
- elasticsearch/elasticsearch: ^6|^7
- markup/json: ^0.1
- symfony/framework-bundle: ^3.4|^4
Requires (Dev)
- composer/ca-bundle: ^1.1
- mockery/mockery: ^1.2
- phpstan/phpstan-shim: ^0.10.5
- phpunit/phpunit: ^7
- symfony/console: ^3.4|^4
- symfony/debug-bundle: ^3.4|^4
- twig/twig: ^2
This package is auto-updated.
Last update: 2024-08-29 05:06:23 UTC
README
一个提供与Elasticsearch PHP SDK简单集成的Symfony扩展包,同时也提供Web分析器信息。
安装
可以通过在项目的composer.json中添加markup/elasticsearch-bundle包来通过Composer安装Markup Elasticsearch扩展包,同时需要指定您所使用的Elastic Stack版本的Elasticsearch SDK的正确版本(例如,使用6.x版本为Elastic Stack的6.x版本,使用7.x版本为7.x版本)。
{
"require": {
"markup/elasticsearch-bundle": "^2",
"elasticsearch/elasticsearch": "^7" //if you are using Elastic Stack 7.x versions
}
}
并将Markup\ElasticsearchBundle\MarkupElasticsearchBundle实例添加到应用程序的内核中。
class AppKernel extends Kernel { public function registerBundles() { return [ ... new \Markup\ElasticsearchBundle\MarkupElasticsearchBundle(), ]; } ... }
配置
单个Elasticsearch客户端服务的配置选项由Elasticsearch PHP SDK定义的扩展配置确定。编译时不会执行验证。
示例YAML配置
在最简单的情况下,可以通过只声明客户端名称(在本例中为markup_elasticsearch.client.simple)来声明客户端服务。
markup_elasticsearch: clients: simple: ~
这将为此客户端设置一个连接节点,位于默认位置https://:9200/。
对于更复杂的情况,可以明确地定义节点(在此处创建一个名为markup_elasticsearch.client.complex的服务)。
markup_elasticsearch: clients: complex: nodes: - host: 8.8.8.8 port: 9201 scheme: https user: i_am_a_user pass: i_am_a_super_secret_password - host: 10.0.3.4 scheme: https user: i_am_another_user pass: pss_dont_tell_i_am_a_password
这将定义一个包含两个节点的客户端,一个位于https://i_am_a_user:i_am_a_super_secret_password@8.8.8.8:9201/,另一个位于https://i_am_another_user:pss_dont_tell_i_am_a_password@10.0.3.4:9200/。
markup_elasticsearch: clients: simple: ~ logger: my_logger_service_id kibana: host: https://my-kibana:5601 should_link_from_profiler: true
这将设置一个默认客户端,如上所述,将记录器定义为提供的Symfony记录器服务ID my_logger_service_id(默认为logger),并将Kibana位置(用于从Symfony Web分析器运行查询)设置为https://kibana-host:5601(默认为https://:5061)。通过将should_link_from_profiler设置为true,在Symfony Web分析器中打开Kibana的链接。
一般设置
markup_elasticsearch: retries: 2
retries可以设置客户端对Elasticsearch实例的重试次数。如果没有指定此数字,则默认行为是使用客户端连接到的集群中的节点数。endpoint_closure虽然这是一个极其脆弱的扩展点,但Elasticsearch SDK允许定义端点闭包以提供不同的端点解析逻辑。有关详细信息和建议,请参阅此处的文档。配置值应是一个服务,它是一个callable- 通常是一个具有定义的__invoke方法的对象。
连接池
可以在每个客户端的基础上定义连接池,可以使用Elasticsearch SDK中的ConnectionPoolInterface实现,或者一个自定义连接池服务。
内置连接池有 static_no_ping(默认)、static、simple 和 sniffing。
markup_elasticsearch: clients: my_client: connection_pool: sniffing
上述配置将定义一个名为 my_client 的客户端,它使用 内置的嗅探连接池。
markup_elasticsearch: clients: my_custom_client: connection_pool: my_custom_pool custom_connection_pools: my_custom_pool: 'acme.my_custom_pool'
上述配置将定义一个名为 my_custom_client 的客户端,它使用自定义连接池服务 acme.my_custom_pool。
连接选择器
您可以在每个客户端的基础上定义 连接选择器,可以使用 Elasticsearch SDK 的 SelectorInterface 实现,或自定义连接选择器服务。
内置的连接选择器有 round_robin(默认)、sticky_round_robin 和 random。
markup_elasticsearch: clients: my_selector_client: connection_selector: sticky_round_robin
上述配置将定义一个名为 my_selector_client 的客户端,它使用 内置的粘性轮询 连接选择器实现。
markup_elasticsearch: clients: my_custom_selector_client: connection_selector: coin_toss custom_connection_selectors: coin_toss: 'acme.coin_toss_selector'
上述配置将定义一个名为 my_custom_selector_client 的客户端,它使用自定义连接选择器服务 acme.coin_toss_selector。
序列化器
预计您不需要配置此功能,但出于完整性考虑提供此功能
您可以在每个客户端的基础上定义 序列化器,可以使用 Elasticsearch SDK 的 SerializerInterface 实现,或实现该接口的自定义序列化器服务。
内置的序列化器有 smart(默认)、array_to_json 和 everything_to_json。
markup_elasticsearch: clients: my_serializer_client: serializer: everything_to_json
上述配置将定义一个名为 my_serializer_client 的客户端,它使用 内置的一切转换为 JSON 序列化器实现。
markup_elasticsearch: clients: my_custom_serializer_client: serializer: mangled custom_serializers: mangle: 'acme.mangled_serializer'
上述配置将定义一个名为 my_custom_serializer_client 的客户端,它使用自定义序列化器服务 acme.mangled_serializer。
HTTP 处理器(RingPHP)
预计您不需要配置此功能,但出于完整性考虑提供此功能
Elasticsearch SDK 在底层使用 RingPHP HTTP 处理器。通常默认处理程序适用于大多数情况,但使用不同的处理程序或自定义处理程序可能会获得一些性能提升等。有关处理程序的更多信息,请参阅 Elasticsearch SDK 处理程序文档。
内置的与 RingPHP 兼容的处理程序有 default(默认)、single 和 multi。
markup_elasticsearch: clients: my_handler_client: handler: multi
上述配置将定义一个名为 my_handler_client 的客户端,它使用内置处理程序,能够并发进行多次调用。(默认处理程序也这样做,但有一些逻辑来决定何时使用它。)
markup_elasticsearch: clients: my_custom_handler_client: handler: edison custom_handlers: edison: 'acme.edison_handler'
上述配置将定义一个名为 my_custom_handler_client 的客户端,它使用自定义 RingPHP 处理程序服务 acme.edison_handler,这个名字似乎是为了纪念托马斯·爱迪生。有关编写 RingPHP HTTP 处理器的更多信息,请参阅项目的处理程序文档。
连接工厂
您可以使用实现 Elasticsearch SDK 的 ConnectionFactoryInterface 的自定义服务,在每个客户端的基础上定义 连接工厂。
除了默认实现外,没有内置的连接工厂。
markup_elasticsearch: clients: my_custom_connection_factory_client: connection_factory: my_super_performant_factory custom_connection_factories: my_super_performant_factory: 'acme.performant_factory'
上述配置将定义一个名为 my_custom_connection_factory_client 的客户端,它使用自定义连接工厂服务 acme.performant_factory。
使用方法
如上所述,客户端作为 \Elasticsearch\Client 的实例提供。从该点开始的使用方法请参照Elasticsearch PHP SDK 文档。
例如,要将配置好的 Elasticsearch 客户端注入到 My\SearchService 服务中,示例 YAML 配置可能如下所示
My\SearchService: arguments: - '@markup_elasticsearch.client.my_client'
客户端服务被定义为私有,因此需要将其注入到控制器和其他服务中。