2017-07-31 67 views
0

我想從我已經有一個索引的主要實體的關聯實體索引一些數據。我的映射規則如下,我也給了下面兩個實體。我的問題是我試圖填充索引時得到OutOfMemoryExceptionbin/console fos:elastica:populate --index=sales_ruleSymfony elastica映射與relationshipip導致OutOfMemoryException,同時填充索引

索引設定

sales_rule: 
      client: default 
      use_alias: true 
      types: 
       sales_rule: 
        mappings: 
         id: {type: integer} 
         name: 
         description: 
         salesCoupons: 
          type: nested 
          properties: 
           code: 
        persistence: 
         driver: orm 
         model: MyProject\MyBundle\Entity\SalesRule 
         provider: 
          batch_size: 100 
         listener: 

實體

/** 
* @ORM\Table(name="sales_rule") 
* @ORM\Entity(repositoryClass="MyProject\MyBundle\Repository\SalesRuleRepository") 
*/ 
class SalesRule 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="text") 
    */ 
    private $description; 

    /** 
    * @var int 
    * 
    * @ORM\Column(type="integer", nullable=true) 
    */ 
    private $usageLimit; 

    /** 
    * @var SalesCoupon[]|ArrayCollection 
    * 
    * @ORM\OneToMany(targetEntity="SalesCoupon", mappedBy="salesRule") 
    */ 
    private $salesCoupons; 

    public function __construct() 
    { 
     $this->salesCoupons = new ArrayCollection(); 
    } 

    /** 
    * @return string 
    */ 
    public function getDescription() 
    { 
     return $this->description; 
    } 

    /** 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @return int 
    */ 
    public function getUsageLimit() 
    { 
     return $this->usageLimit; 
    } 

    /** 
    * @return int 
    */ 
    public function getUsagePerCustomer() 
    { 
     return $this->usagePerCustomer; 
    } 

    /** 
    * @param string $description 
    * @return SalesRule 
    */ 
    public function setDescription($description) 
    { 
     $this->description = $description; 

     return $this; 
    } 

    /** 
    * @param string $name 
    * @return SalesRule 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * @param int $usageLimit 
    * @return SalesRule 
    */ 
    public function setUsageLimit($usageLimit) 
    { 
     $this->usageLimit = $usageLimit; 

     return $this; 
    } 

    /** 
    * @return SalesCoupon[]|ArrayCollection 
    */ 
    public function getSalesCoupons() 
    { 
     return $this->salesCoupons; 
    } 

    /** 
    * @param ArrayCollection $salesCoupons 
    */ 
    public function setSalesCoupons(ArrayCollection $salesCoupons) 
    { 
     $this->salesCoupons = $salesCoupons; 
    } 
} 

    /** 
* @ORM\Table(name="sales_coupon") 
* @ORM\Entity(repositoryClass="MyProject\MyBundle\Repository\SalesCouponRepository") 
*/ 
class SalesCoupon 
{ 

    /** 
    * @var int 
    * 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    private $id; 

    /** 
    * @var SalesRule 
    * 
    * @Serializer\Exclude 
    * 
    * @ORM\ManyToOne(targetEntity="SalesRule", inversedBy="salesCoupons") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $salesRule; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(type="datetime", nullable=true) 
    */ 
    private $fromDate; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(type="datetime", nullable=true) 
    */ 
    private $toDate; 

    /** 
    * @var string 
    * 
    * @ORM\Column(nullable=true) 
    */ 
    private $code; 

    /** 
    * @var int 
    * 
    * @Assert\Range(min=0) 
    * 
    * @ORM\Column(type="integer", nullable=true) 
    */ 
    private $usageLimit; 


    public function __construct() 
    { 
     $this->salesCouponCustomers = new ArrayCollection(); 
    } 

    /** 
    * @return string 
    */ 
    public function getCode() 
    { 
     return $this->code; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getFromDate() 
    { 
     return $this->fromDate; 
    } 

    /** 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @return \Unity\CmsBundle\Entity\SalesRule 
    */ 
    public function getSalesRule() 
    { 
     return $this->salesRule; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getToDate() 
    { 
     return $this->toDate; 
    } 

    /** 
    * @param string $code 
    * @return SalesCoupon 
    */ 
    public function setCode($code) 
    { 
     $this->code = $code; 

     return $this; 
    } 

    /** 
    * @param \DateTime $fromDate 
    * @return SalesCoupon 
    */ 
    public function setFromDate($fromDate) 
    { 
     $this->fromDate = $fromDate; 

     return $this; 
    } 

    /** 
    * @param \Unity\CmsBundle\Entity\SalesRule $salesRule 
    * @return SalesCoupon 
    */ 
    public function setSalesRule(SalesRule $salesRule) 
    { 
     $this->salesRule = $salesRule; 

     return $this; 
    } 

    /** 
    * @param \DateTime $toDate 
    * @return SalesCoupon 
    */ 
    public function setToDate($toDate) 
    { 
     $this->toDate = $toDate; 

     return $this; 
    } 
} 

回答

0

你能嘗試設置限制內存無限制。 php -d memory_limit=-1 bin/console fos:elastica:populate --index=sales_rule

+0

這不是一個合適的解決方案,因爲我不能在生產中做到這一點。我想知道在映射配置中是否有問題。 – Shaolin