2015-12-20 66 views
1

我定義我的索引ads如下:映射定義有不支持的參數:[商店:TRUE]

fos_elastica: 
    clients: 
     default: { host: %elastica_host%, port: %elastica_port% }   
    indexes: 
      ads: 
      types:       
       brand: 
        mappings: 
         name: 
          type: string 
          boost: 5 
         slug: 
          type: string 
          boost: 4 
         date : ~ 
         isPublished: ~ 
         user: 
          type: nested 
          properties: 
           username: ~ 
           email: ~ 
        persistence: 
         driver: orm 
         model: Minn\AdsBundle\Entity\Brend 
         elastica_to_model_transformer: 
          service: minn_ads.transformers_elastica.brand 
         provider: ~ 
         listener: 
          immediate: ~ 
         finder: ~ 

供參考: 1.這是如何BrendUser與@ManyToOne聯

/** 
* @ORM\ManyToOne(targetEntity="Minn\UserBundle\Entity\User") 
* @ORM\JoinColumn(nullable=false) 
*/ 
private $user; 

供參考: 2.我使用dev-master分支FOSElasticaBundle和Elastica。對於elasticsearch,我使用2.1.1。

甲populate命令php app/console fos:elastica:populate總是返回此錯誤:

[彈性曲線\異常\ ResponseException]
{ 「ROOT_CAUSE」:[{ 「類型」: 「mapper_parsing_exception」, 「理由」:「用於映射的定義[user]有不支持的參數:[store:true]「}],」type「:」mapper_parsing_exception「,」reason「:」解析映射失敗[品牌]:
[user]的映射定義具有不支持的參數: store:true]「,」causes_by「:{」type「:」mapper_parsing_exception「,」reason「:」[用戶]的映射定義具有不支持的參數:[store:true]「}}

我檢查了app/logs/dev.log,我發現索引ads生成的映射有一個額外的參數"store":true。您可以檢查下來:

[2015年12月20日21時28分21秒] elastica.DEBUG:日誌請求{ 「路徑」: 「廣告/」, 「方法」: 「PUT」, 「數據」 :{ 「映射」:{ 「品牌」:{ 「屬性」:{ 「名」:{ 「類型」: 「串」, 「提升」:5, 「存儲」:真正}, 「彈頭」:{「型「:」 串 「 」提升「:4, 」存儲「:真正}, 」日期「:{ 」類型「: 」串「, 」存儲「:真正} 」|評論「:{ 」類型「:」 串」, 「商店」:真}, 「用戶」:{ 「類型」: 「嵌套」, 「屬性」:{ 「用戶名」:{ 「類型」: 「字符串」, 「存儲」:真}, 「電子郵件」 :{ 「類型」: 「字符串」, 「存儲」:真}}, 「存儲」:真}}, 「dynamic_date_formats」:[], 「_元」:{ 「模型」:「明尼蘇達州\ AdsBundle \實體\ Brend 「}}}},」 查詢 「:[],」 連接 「:{」 配置 「:{」 報頭 「:[]},」 宿主 「:」 127.0.0.1" , 「端口」:9200, 「記錄器」 :「fos_elastica.logger」,「enabled」:true}} []

下面是映射w ith額外"store": true。是否有任何想法如何配置FOSElasticaBundle獲得一個映射沒有這個額外的線"store": true

{ 
    "mappings": { 
     "brand": { 
      "properties": { 
       "name": { 
        "type": "string", 
        "boost": 5, 
        "store": true 
       }, 
       "slug": { 
        "type": "string", 
        "boost": 4, 
        "store": true 
       }, 
       "date": { 
        "type": "string", 
        "store": true 
       }, 
       "isPublished": { 
        "type": "string", 
        "store": true 
       }, 
       "user": { 
        "type": "nested", 
        "properties": { 
         "username": { 
          "type": "string", 
          "store": true 
         }, 
         "email": { 
          "type": "string", 
          "store": true 
         } 
        }, 
        "store": true # extra line! If deleted, it will work! 
       } 
      } 
     } 
    } 
} 
+0

對於那些願意關注,FOSElasticaBundle Github回購的[已打開問題](https://github.com/FriendsOfSymfony/FOSElasticaBundle/issues/985)。 – Val

回答

2

有一個在MappingBuilder.php它試圖添加store: true每當store property is not specified的錯誤。

什麼你可以嘗試是明確指定store: false使得!isset($property['store'])測試失敗:

   mappings: 
        name: 
         type: string 
         boost: 5 
        slug: 
         type: string 
         boost: 4 
        date : ~ 
        isPublished: ~ 
        user: 
         type: nested 
         store: false  <--- 
         properties: 
          username: ~ 
          email: ~ 

你可以嘗試的另一件事情就是修改私人$skipTypes陣列包括另外的completionnested,那可以做訣竅。

+0

我會檢查,當我回家。謝謝你的回答... –

+0

商店:假沒有工作!我剛剛評論了這個bug的代碼。那裏有公關! –

+0

這就是我所害怕的。那麼'$ skipTypes'呢? – Val

0

這是FOSElasticaBundle中的一個錯誤。它在這PR 987解決。

您只需對與該錯誤相關的Index/MappingBuilder.php中的行進行註釋!

相關問題