FOSElasticaBundle:如何不索引脱机文档?
FOSElasticaBundle: How to not index offline document?
我有一个 MySQL 数据库 "documents" 被 ElasticSearch 和 Symfony2 的 FOSElasticaBundle 使用控制台命令索引:
php app/console fos:elastica:populate
我不希望将 "online" 列为 false 的文档编入索引。
我需要做什么来配置该需求?
您必须创建一个自定义文档加载器,您将在其中检查在线是否为真,如果是 - return 一个新的文档实例。
FosElasticaBundle 为每个文档提供者提供了一个名为 ProviderInterface 的接口,您可以创建一个实现该接口的服务,将其标记为 "fos_elastica.provider"。
有点像:
<service id="service.id" class="Some\Bundle\Some\Class">
<tag name="fos_elastica.provider" index="<index>" type="<type>" />
<argument type="service" id="fos_elastica.index.<index>.<type>" />
<argument type="service" id="logger" />
<argument type="service" id="op.search.loader.product" />
<argument>150</argument>
</service>
该服务将负责填充特定的索引类型。
该服务将实现填充方法,您可以在其中编写自己的逻辑来填充该类型。
可以在索引过程中添加回调以检查对象是否必须被索引。
只需在配置中添加 indexable_callback
即可:
types:
document:
indexable_callback: 'isIndexable'
那样的话,就得在关联对象中写一个isIndexable
方法,例如:
public function isIndexable() {
return $this->getOnline() && $this->getPublished();
}
我有一个 MySQL 数据库 "documents" 被 ElasticSearch 和 Symfony2 的 FOSElasticaBundle 使用控制台命令索引:
php app/console fos:elastica:populate
我不希望将 "online" 列为 false 的文档编入索引。
我需要做什么来配置该需求?
您必须创建一个自定义文档加载器,您将在其中检查在线是否为真,如果是 - return 一个新的文档实例。
FosElasticaBundle 为每个文档提供者提供了一个名为 ProviderInterface 的接口,您可以创建一个实现该接口的服务,将其标记为 "fos_elastica.provider"。
有点像:
<service id="service.id" class="Some\Bundle\Some\Class">
<tag name="fos_elastica.provider" index="<index>" type="<type>" />
<argument type="service" id="fos_elastica.index.<index>.<type>" />
<argument type="service" id="logger" />
<argument type="service" id="op.search.loader.product" />
<argument>150</argument>
</service>
该服务将负责填充特定的索引类型。 该服务将实现填充方法,您可以在其中编写自己的逻辑来填充该类型。
可以在索引过程中添加回调以检查对象是否必须被索引。
只需在配置中添加 indexable_callback
即可:
types:
document:
indexable_callback: 'isIndexable'
那样的话,就得在关联对象中写一个isIndexable
方法,例如:
public function isIndexable() {
return $this->getOnline() && $this->getPublished();
}