FOSElasticaBundle:如何不索引离线文档?

时间:2015-02-25 17:26:03

标签: symfony elasticsearch foselasticabundle

我有一个“数据库”的MySQL数据库被ElasticSearch使用控制台命令的FOSElasticaBundle for Symfony2编入索引:

php app/console fos:elastica:populate

我不希望将“online”列的文档编入索引。

我该怎么做才能配置这种需求?

2 个答案:

答案 0 :(得分:1)

您必须创建一个自定义文档加载器,您将检查在线是否为真,如果是,则返回一个新的文档实例。

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>

该服务将负责填充特定的索引类型。 该服务将实现populate方法,您可以在其中编写自己的逻辑以填充该类型。

答案 1 :(得分:1)

可以在索引过程中添加回调来检查对象是否必须编入索引。

只需在配置中添加indexable_callback

types: document: indexable_callback: 'isIndexable'

在这种情况下,您必须在关联对象中编写isIndexable方法,例如:

public function isIndexable() { return $this->getOnline() && $this->getPublished(); }