elasticsearch,doctrine-orm,ongr,Php,Symfony,elasticsearch,Doctrine Orm,Ongr" /> elasticsearch,doctrine-orm,ongr,Php,Symfony,elasticsearch,Doctrine Orm,Ongr" />

Php ongr io elasticsearch捆绑包与条令symfony2的实现

Php ongr io elasticsearch捆绑包与条令symfony2的实现,php,symfony,elasticsearch,doctrine-orm,ongr,Php,Symfony,elasticsearch,Doctrine Orm,Ongr,在我们的symfony2项目中,我们希望用ongr io包实现elasticsearch,但我们的整个系统是建立在理论基础上的。是否可以使用ongr io elasticsearch捆绑包,而不完全使用文档而不是实体重做整个数据库 我要索引的实体(搜索字段为:name、ChildCategory和ParentCategory): 这很有趣 首先是实体位置。ElasticsearchBundle的文档必须位于document目录中。没什么大不了的。您只需创建一个空类并使用@Document注释扩展

在我们的symfony2项目中,我们希望用ongr io包实现elasticsearch,但我们的整个系统是建立在理论基础上的。是否可以使用ongr io elasticsearch捆绑包,而不完全使用文档而不是实体重做整个数据库

我要索引的实体(搜索字段为:name、ChildCategory和ParentCategory):

这很有趣

首先是实体位置。ElasticsearchBundle的文档必须位于
document
目录中。没什么大不了的。您只需创建一个空类并使用
@Document
注释扩展实体。接下来是田地。使用
name
字段完全没有问题,只需添加
@property
注释即可。更有趣的是关系。我的建议是从该字段的关系中创建单独的属性和getter返回值。我希望你明白了

更新:

下面是一个文档示例:

AppBundle/实体/邮政

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use ONGR\ElasticsearchBundle\Annotation as ES;

/**
 * Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
 */
class Post
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ES\Property(type="string")
     * @ORM\Column(name="title", type="string", length=255, nullable=true)
     */
    private $title;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @var string
     *
     * @ES\Property(name="user", type="string")
     */
    private $esUser;

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

    /**
     * Set title
     *
     * @param string $title
     *
     * @return Post
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }

    /**
     * Get title
     *
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * Set user
     *
     * @param \AppBundle\Entity\User $user
     *
     * @return Post
     */
    public function setUser(\AppBundle\Entity\User $user = null)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \AppBundle\Entity\User
     */
    public function getUser()
    {
        return $this->user;
    }

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

    /**
     * @param string $esUser
     */
    public function setEsUser($esUser)
    {
        $this->esUser = $esUser;
    }
}
这很有趣

首先是实体位置。ElasticsearchBundle的文档必须位于
document
目录中。没什么大不了的。您只需创建一个空类并使用
@Document
注释扩展实体。接下来是田地。使用
name
字段完全没有问题,只需添加
@property
注释即可。更有趣的是关系。我的建议是从该字段的关系中创建单独的属性和getter返回值。我希望你明白了

更新:

下面是一个文档示例:

AppBundle/实体/邮政

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use ONGR\ElasticsearchBundle\Annotation as ES;

/**
 * Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
 */
class Post
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ES\Property(type="string")
     * @ORM\Column(name="title", type="string", length=255, nullable=true)
     */
    private $title;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @var string
     *
     * @ES\Property(name="user", type="string")
     */
    private $esUser;

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

    /**
     * Set title
     *
     * @param string $title
     *
     * @return Post
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }

    /**
     * Get title
     *
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * Set user
     *
     * @param \AppBundle\Entity\User $user
     *
     * @return Post
     */
    public function setUser(\AppBundle\Entity\User $user = null)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \AppBundle\Entity\User
     */
    public function getUser()
    {
        return $this->user;
    }

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

    /**
     * @param string $esUser
     */
    public function setEsUser($esUser)
    {
        $this->esUser = $esUser;
    }
}

谢谢您的回复。如果我理解正确,那么我只需在Document folder中创建一个空类,并继续在我已经拥有的实体上执行所有操作,但如果我这样做,我会得到一个错误:“CoreBundle\Document\Course”类无法解析为Document,因为缺少@Document annotation。”只有当我将该类扩展为Document时,该类才会起作用,但是,它不只是在这个空文档类中查找字段吗?我想,我误解了您想要做的事情。如果您想将实体持久化到Elasticsearch,这将没有帮助。如果您将有一个单独的类,您仍然需要使用实体中的值填充。为什么不简单地用您需要的字段创建单独的文档?但这种复制不会对性能和存储使用产生太大的影响吗?而且,如果我理解正确,在搜索过程中,首先我只需查找这些文档,然后通过ID查找有条令的实体,这看起来是一个相当混乱的解决方案,不是吗?将所有内容索引到elasticsearch,然后显示它。据我所知,您试图以错误的方式使用elasticsearch。谢谢您的回复。如果我理解正确,那么我只需在Document folder中创建一个空类,并继续在我已经拥有的实体上执行所有操作,但如果我这样做,我会得到一个错误:“CoreBundle\Document\Course”类无法解析为Document,因为缺少@Document annotation。”只有当我将该类扩展为Document时,该类才会起作用,但是,它不只是在这个空文档类中查找字段吗?我想,我误解了您想要做的事情。如果您想将实体持久化到Elasticsearch,这将没有帮助。如果您将有一个单独的类,您仍然需要使用实体中的值填充。为什么不简单地用您需要的字段创建单独的文档?但这种复制不会对性能和存储使用产生太大的影响吗?而且,如果我理解正确,在搜索过程中,首先我只需查找这些文档,然后通过ID查找有条令的实体,这看起来是一个相当混乱的解决方案,不是吗?将所有内容索引到elasticsearch,然后显示它。据我所知,您试图以错误的方式使用elasticsearch。
<?php

namespace AppBundle\Document;

use ONGR\ElasticsearchBundle\Annotation as ES;
use AppBundle\Entity\Post as OldPost;

/**
 * @ES\Document()
 */
class Post extends OldPost
{
}