aternovtsii / search-bundle
Symfony 扩展包,用于轻松集成 elastic/opensearch 搜索引擎和 doctrine
v1.2.0
2024-09-04 08:52 UTC
Requires
- php: >=8.2
- doctrine/orm: ^3.0
- murtukov/php-code-generator: ^0.1
- symfony/dependency-injection: ^6.4 || ^7.0
- symfony/event-dispatcher: ^6.4 || ^7.0
- symfony/filesystem: ^6.4 || ^7.0
- symfony/orm-pack: ^2.4
- symfony/translation-contracts: ^3.4
Suggests
- elasticsearch/elasticsearch: For integration with elasticsearch search engine
- opensearch-project/opensearch-php: For integration with opensearch search engine
README
composer require aternovtsii/search-bundle
要启用扩展包,将以下内容添加到您的 config/bundles.php 文件中
<?php return [ // ... ATSearchBundle\ATSearchBundle::class => ['all' => true], ];
要启用额外的 doctrine 过滤器,将以下内容添加到您的 config/doctrine.yaml 文件中
doctrine: orm: dql: numeric_functions: IFNULL: ATSearchBundle\Doctrine\Extensions\Query\IfNull JSON_CONTAINS: ATSearchBundle\Doctrine\Extensions\Query\JsonContains RAND: ATSearchBundle\Doctrine\Extensions\Query\Rand
在您的 config/packages/at_search.yaml 文件中配置扩展包
at_search: search: enabled: true client: OpenSearch\Client # OpenSearch\Client or Elasticsearch\Client mappings: App: namespace: App\Entity dir: '%kernel.project_dir%/src/Entity'
要创建 OpenSearch 客户端,将以下内容添加到您的 config/services.yaml 文件中
OpenSearch\Client: factory: ['OpenSearch\ClientBuilder', 'fromConfig'] arguments: $config: hosts: ['%env(OPENSEARCH_URL)%']
要创建 ElasticSearch 客户端,将以下内容添加到您的 config/services.yaml 文件中
Elasticsearch\Client: factory: ['Elasticsearch\ClientBuilder', 'fromConfig'] arguments: $config: hosts: ['%env(ELASTICSEARCH_URL)%']
使用示例
<?php namespace App\Entity; use ATSearchBundle\Annotation as ATSearch; use Doctrine\ORM\Mapping as ORM; #[ATSearch\Index] #[ORM\Entity] class User { #[ATSearch\FieldId] #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] public ?int $id = null; #[ATSearch\FieldString] #[ORM\Column(length: 128)] public ?string $firstName = null; #[ATSearch\FieldMultiString(subFields: 'email')] #[ORM\OneToMany(mappedBy: 'user', targetEntity: Email::class)] public Collection $emails;
要启用基于 Doctrine 事件的默认重新索引,将以下内容添加到您的 config/packages/at_search.yaml 文件中
at_search: search: enable_update_events: true # default false