Php ongr io elasticsearch捆绑包与条令symfony2的实现
在我们的symfony2项目中,我们希望用ongr io包实现elasticsearch,但我们的整个系统是建立在理论基础上的。是否可以使用ongr io elasticsearch捆绑包,而不完全使用文档而不是实体重做整个数据库 我要索引的实体(搜索字段为:name、ChildCategory和ParentCategory): 这很有趣 首先是实体位置。ElasticsearchBundle的文档必须位于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注释扩展
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
{
}