1

我正在使用帶有orm持久性驅動程序和JMSSerializerBundle序列化程序的FOSElasticaBundle。FOSElasticaBundle - JMSSerializerBundle排除策略無法在FOSUserBundle上運行用戶實體

我的用戶由FOSUserBundle管理,我試圖將這些索引編入索引,但排除了某些字段,如密碼。

將JMSSerializerBundle排除策略(如@ExclusionPolicy(「all」)@Expose @Exclude)添加到擴展FOS \ UserBundle \ Model \ User的User實體時沒有任何影響。但是,這些策略在我的其他實體上按預期工作。

如何停止將'salt'和'password'等字段添加到Elasticsearch索引中?

+0

不要指定要作爲elasticsearch配置的一部分進行索引的字段嗎? – DavidLin

+0

否,在使用orm持久性驅動程序(持久性自動提供程序)時,會忽略配置中定義的映射。這在文檔中沒有清楚說明,但我已經在GitHub上閱讀過它,並且在自己的實踐中發現了它。 – mattvick

回答

0

作爲解決方法,我使用'query_builder_method' FOSElasticaBundle配置設置來調用創建queryBuilder的方法,該方法使用DQL部分對象語法只選擇我想要編入索引的字段。

下面是一些有用的鏈接:

DQL部分對象語法: http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html#partial-object-syntax

使用自定義的學說查詢生成器: https://github.com/FriendsOfSymfony/FOSElasticaBundle#use-a-custom-doctrine-query-builder

0

這是一個知道的事情與串行和註釋。您還必須在父級(= FOS UserBundle)模型上定義排除策略。

我有更多的YAML配置解決了這個問題:

這是我的配置:

jms_serializer: 
    metadata: 
     directories: 
      - { path: %kernel.root_dir%/Resources/serializer/FOS, namespace_prefix: 'FOS\UserBundle' } 

而且該文件夾我有例如User.Model.yml與此內容中:

FOS\UserBundle\Model\User: 
    exclusion_policy: ALL 
    properties: 
     email: 
      expose: true