- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 FOSElasticaBundle 开发一个名为“Foobar”的基本实体。我已经定义了 1 个名为“foobar
”的索引,其中包含 2 种类型“foobar_published
”和“foobar_draft
”。问题是我的 Foobar 实体不会自动与 Elasticsearch 同步,我需要在每次修改 Foobar 实体后运行以下命令:“php app/console fos:elastica:populate
”。之后,我在 elasticsearch 中的文档就如它们应该的那样,这意味着弹性文档就像我数据库中的相关实体。
我应该如何在不一直运行“php app/console fos:elastica:populate
”的情况下自动获取 elasticsearch 中的“最新”文档?
我的配置有问题吗?
来 self 的 composer.json 的版本信息:"friendsofsymfony/elastica-bundle": "~3.0.0"
Elasticsearch 映射在这里描述:
fos_elastica:
clients:
default: { host: %elasticsearch_host%, port: %elasticsearch_port% }
indexes:
foobar:
client: default
types:
foobar_published:
mappings:
state: ~
field1: ~
persistence:
driver: orm
model: App\MyBundle\Entity\Foobar
provider:
query_builder_method: createIsIndexablePublishedQueryBuilder
listener: {immediate: ~}
finder: ~
foobar_draft:
mappings:
state: ~
field1: ~
persistence:
driver: orm
model: App\MyBundle\Entity\Foobar
provider:
query_builder_method: createIsIndexableDraftQueryBuilder
listener: {immediate: ~}
finder: ~
Foobar实体定义如下:
/**
* @ORM\Entity(repositoryClass="App\MyBundle\Repository\FoobarRepository")
*/
class Foobar extends BaseEntity
{
const STATE_TO_BE_INDEXED_IN_ELA = 'published';
const STATE_DRAFT_TO_BE_INDEXED_IN_ELA = 'draft';
const STATE_NOT_TO_BE_INDEXED_IN_ELA = 'unpublished';
/**
* @ORM\Column(type="string")
*/
private $state;
/**
* @ORM\Column(type="string")
*/
private $field1;
/**
* @return mixed
*/
public function getState()
{
return $this->state;
}
/**
* @param mixed $state
*/
public function setState($state)
{
$this->state = $state;
}
/**
* @return mixed
*/
public function getField1()
{
return $this->field1;
}
/**
* @param mixed $field1
*/
public function setField1($field1)
{
$this->field1 = $field1;
}
}
FoobarRepository 看起来像这样:
class FoobarRepository extends EntityRepository
{
public function createIsIndexablePublishedQueryBuilder()
{
$qb = $this->createQueryBuilder('foobar');
$qb
->where('foobar.state = :state')
->setParameter('state', Foobar::STATE_TO_BE_INDEXED_IN_ELA);
return $qb;
}
public function createIsIndexableDraftQueryBuilder()
{
$qb = $this->createQueryBuilder('foobar');
$qb
->where('foobar.state = :state')
->setParameter('state', Foobar::STATE_DRAFT_TO_BE_INDEXED_IN_ELA);
return $qb;
}
}
Controller 中的测试方法:
public function indexAction()
{
$em = $this->get("doctrine.orm.default_entity_manager");
$foobar = new Foobar();
$foobar->setField1('should be indexed in ela');
$foobar->setState(Foobar::STATE_TO_BE_INDEXED_IN_ELA);
$foobar2 = new Foobar();
$foobar2->setField1('should NOT be indexed in ela');
$foobar2->setState(Foobar::STATE_NOT_TO_BE_INDEXED_IN_ELA);
$foobar3 = new Foobar();
$foobar3->setField1('should be indexed in ela');
$foobar3->setState(Foobar::STATE_DRAFT_TO_BE_INDEXED_IN_ELA);
$em->persist($foobar);
$em->persist($foobar2);
$em->persist($foobar3);
$em->flush();
$existingFoobar = $em->getRepository('AppMyBundle:Foobar')->findAll();
foreach ($existingFoobar as $foo) {
echo $foo->getId() . ' : ' . $foo->getField1() . ' ' . $foo->getState();
echo '<br>';
}
return new Response('done');
}
最后,我用这个查询监控 elasticsearch :
curl -XGET "http://localhost:9200/foobar/_search" -d'
{
"query": {
"match_all": {}
}
}'
最佳答案
所以配置现在看起来像这样:
fos_elastica:
clients:
default: { host: %elasticsearch_host%, port: %elasticsearch_port% }
indexes:
foobar:
client: default
types:
foobar_published:
indexable_callback: 'isPublished'
mappings:
state: ~
field1: ~
persistence:
listener: ~
driver: orm
model: App\MyBundle\Entity\Foobar
provider:
query_builder_method: createIsIndexablePublishedQueryBuilder
finder: ~
foobar_draft:
indexable_callback: 'isDraft'
mappings:
state: ~
field1: ~
persistence:
listener: ~
driver: orm
model: App\MyBundle\Entity\Foobar
provider:
query_builder_method: createIsIndexableDraftQueryBuilder
finder: ~
而且我还在 Foobar 实体中实现了回调方法:
class Foobar extends BaseEntity {
...
public function isPublished()
{
if ($this->getState() === self::STATE_TO_BE_INDEXED_IN_ELA) {
return true;
}
return false;
}
public function isDraft()
{
if ($this->getState() === self::STATE_DRAFT_TO_BE_INDEXED_IN_ELA) {
return true;
}
return false;
}
}
现在一切正常,文档与正确索引 Ant 类型的文档同步。我使用这些查询来检查结果:
curl -XPOST "http://localhost:9200/foobar/foobar_published/_search?size=300"
curl -XPOST "http://localhost:9200/foobar/foobar_draft/_search?size=300"
注意:我还将配置文件中的监听器属性更改为 'listener: ~'
而不是 'listener: {immediate: ~}'
。
我测试了插入、删除和更新语句,现在一切正常!
关于Symfony 2 FOSElasticaBundle : elastic search documents are not automatically synchronized with entities : need to run ' fos:elastica:populate' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755400/
我正在尝试将我的应用程序上载到Elastic Beanstalk,但是在节点预gyp安装--fallback-to-build上,npm安装失败。我尝试了各种版本的节点,但无济于事。似乎正在尝试获取一
每当我在 Elastic Beanstalk 中创建新环境时,我都会手动配置自定义 AMI ID、SNS 通知等,但我想自动完成,即,将设置(自定义 AMI ID、SNS、 key 对等)保存到一个配
我已使用以下方法连接到 Elastic Beanstalk: eb ssh XXXXXX --profile=xx 现在我想将一个文件复制到我的本地机器上,我该怎么做? 最佳答案 找出与 scp 一起
对于典型的 Java Web 应用程序,使用 Elastic Beanstalk 相对于手动创建 EC2 实例、设置 tomcat 服务器和部署等有哪些优势?负载平衡、监控和自动缩放是唯一的优势吗?
我有两个Elastic Search版本,一个是 7.3 ,另一个是 7.1 。我正在将flattened数据类型用于 Elastic Search 7.3 ,并且我也想在 Elastic Searc
我是 Elastic 和 spring-data-elastic 的新手。我一直在此处和网络的其他区域进行搜索,但到目前为止尚未找到我的问题的答案。我希望 SO 能够提供帮助。 我正在为我的Users
我有一个运行 PHP 的弹性 beanstalk 环境。在我的项目中,我有一个 .ebextensions 文件夹和一个名为“15-memorymonitor.config”的文件,其中包含以下内容;
我有 “更新”:Dockerrun.aws.json 中的“真” 当我更新 ECR 中的图像时,它应该自动更新 EC2 iontance 中的图像和容器。 但是当我在推送新图像后通过 ssh 进入实例
我有一个定义 Elastic Beanstalk 应用程序的 CloudFormation 模板。 我想扩展这个应用程序,即我希望端口 80 上的监听器重定向到 HTTPS。 AWS::Elastic
我在使用自定义 .ebextensions 文件部署 EB 实例时遇到问题。这是该文件中的相关部分: container_commands: 01_migrate: command: 'p
我已经使用带负载均衡器的 Elastic Beanstalk 创建了一个环境,并在各自的配置中分配了所有健康检查值 我也为ELB设置了应用健康检查url 但是当我检查自动缩放组配置时,健康检查类型是
我想使用 OpenTelemetry 将跟踪/指标数据导出到 Elastic Search,但我更愿意避免使用 Elastic APM。是否可以?opentelemetry 贡献 repo显然暗示这是
我正在尝试部署我的 角申请通过GitHub Actions到 Elastic Beanstalk 。我正在使用这个 GitHub actions用于部署到 ELB。 我的问题是,部署失败,因为 ELB
我已阅读有关 Deploying Versions with Zero Downtime 的 AWS 文档,又名 CNAME 交换。 如 yegor256在 this answer 中有解释: The
我们在我们的一个应用程序服务器上安装了 Elastic 5.6.10 和 HibernateSearch ORM 5.11.4.Final,现在我们计划通过我们的一个微服务(spring boot,但
我正在使用 AWS Elastic beanstalk 并希望为不同的环境配置不同的 ENV 变量。我发现的唯一方法是使用 ebextensions,但如果我将同一个数据包部署到多个环境,则无法覆盖在
我有一个应用程序,其中包含 nodejs 和 php 代码。 nodejs 用于运行应用程序所需的几个脚本。我如何使用 aws Elastic beanstalk 部署此类应用程序? 最佳答案 有两种
我打算将 MP4(1920x1080,比特率可能因 mp4 而异)转换为 HLS(不同类型的分辨率)。 不同类型的分辨率,我正在寻找 1080p = 1920x1080 720p = 1280x720
我不断收到以下消息。但是在我的 nginx 日志中没有任何内容表明返回的请求状态为 5xx。此外,应用程序似乎按预期工作。我可能会得到这些的任何指示? 留言: Environment health h
我们如何使用 bitbucket 管道更新 aws elastic beanstalk 上的 asp.net 核心网站? 最佳答案 我知道这是迟到的答案,但几天前我做了同样的事情,所以这里是我是如何做
我是一名优秀的程序员,十分优秀!