alamirault / elasticsearch-form-bundle
发布文档、搜索、表单监听器
dev-master
2019-07-14 15:31 UTC
Requires
- php: ^7.1
- ruflin/elastica: ^6.1
- symfony/config: ^3.4|^4.0
- symfony/dependency-injection: ^3.4|^4.0
- symfony/form: ^3.4|^4.0
- symfony/http-foundation: ^3.4|^4.0
- symfony/http-kernel: ^3.4|^4.0
- symfony/options-resolver: ^3.4|^4.0
- symfony/security: ^3.4|^4.0
- symfony/serializer: ^3.4|^4.0
- symfony/yaml: ^3.4|^4.0
Requires (Dev)
- phpunit/phpunit: ^6.0|^7.5
This package is auto-updated.
Last update: 2024-09-30 02:13:06 UTC
README
概览
这个Symfony包允许创建表单并将字段转换为Elasticsearch查询。创建表单类型后,您将能够从表单类型更新Elasticsearch查询。
想法是
- 创建一个表单类型,为每个字段传递选项
elastic_filter_condition
- 使用
ElasticsearchMaker
提交搜索、分页、排序。
安装
-
运行
composer require alamirault/elasticsearch-form-bundle
-
在您的
app/AppKernel.php
中注册此包<?php ... public function registerBundles() { $bundles = array( ... new Alamirault\ElasticsearchBundle\AlamiraultElasticsearchFormBundle(), ... ); ...
配置
alamirault_elasticsearch_form:
clients:
default:
connections:
- { host: "elasticsearch_host", port: 9200, proxy: null }
logger: logger.api
indexes:
users:
mapping: '%kernel.project_dir%/src/Alamirault/LogsBundle/Resources/elasticsearch/mapping/change.yml'
用法
在 ExampleFilterType 类中
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('uuid', TextType::class, [ 'elastic_filter_condition' => function (?string $value) { if (is_null($value)) { return; } return new Match('uuid', $value); }, ]) }
在控制器中制作一个搜索页面列表
public function indexAction(Request $request, FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, TranslatorInterface $translator, BoLogEntryDenormalizer $denormalizer) { $form = $formFactory->create(ExampleFilterType::class); $sortableChanges = $this->elasticsearchMaker->manageForm($form, $request, $this->indexRegistry, "changes", $denormalizer); return $this->render('AlamiraultLogsBundle:Changes:index.html.twig', [ "form" => $form->createView(), "sortableChanges" => $sortableChanges, ] ); }
通过uuid值搜索用户
$matchLike = new Query\Wildcard('uuid', $value."*"); $query = new Query(); $query->setQuery($matchLike); $query->setSource(["object_uuid"]); $resultSet = $this->elasticsearchMaker->makeSearch($this->indexRegistry, "users", $query);
发布文档
$normalized = $serializer->normalize($user) //User is an object; $doc = new Document($user->getUuid(), $normalized); $index = $this->indexMaker->getIndex($this->indexRegistry, "users", IndexMaker::WRITE); $type = new Type($index, '_doc'); // Only if elasticsearch <7.2.0 $type->addDocuments([$doc]);
测试
./vendor/bin/phpunit --bootstrap vendor/autoload.php Tests/