In unserem symfony2 Projekt wollen wir elasticsearch mit ongr-io bundle implementieren, aber unser ganzes System baut auf Doktrin auf. Ist es irgendwie möglich, ongr-io elasticsearch bundle zu verwenden, ohne die gesamte Datenbank mit Dokumenten anstelle von Entitäten komplett neu zu erstellen?ongr-io elasticsearch bundle implementation mit doctrine symfony2
Entity, die ich indizieren möchten (Felder für die Suche wäre: Name, ChildCategory und parent):
/**
* Course
*
* @ORM\Table(name="course")
* @ORM\Entity(repositoryClass="CoreBundle\Repository\CourseRepository")
* @ORM\HasLifecycleCallbacks
*/
class Course
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=false)
*/
private $name;
/**
* @var ParentCategory
*
* @ORM\ManyToOne(targetEntity="ParentCategory")
* @ORM\JoinColumn(name="parentCategory_id", referencedColumnName="id")
*/
private $parentCategory;
/**
* @var ChildCategory
*
* @ORM\ManyToOne(targetEntity="ChildCategory", inversedBy="courses")
* @ORM\JoinColumn(name="childCategory_id", referencedColumnName="id")
*/
private $childCategory;
/**
* @var City
*
* @ORM\ManyToOne(targetEntity="City")
* @ORM\JoinColumn(name="city_id", referencedColumnName="id")
*/
private $city;
/**
* @var Users
*
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\Users", inversedBy="course")
* @ORM\JoinColumn(name="owner_id", referencedColumnName="id")
*/
private $owner;
/**
* @var text
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @var Picture
*
* @ORM\OneToMany(targetEntity="CoreBundle\Entity\Picture", mappedBy="course", cascade={"persist", "remove"})
*/
private $pictures;
/**
* @var Ratings
*
* @ORM\OneToMany(targetEntity="CoreBundle\Entity\Ratings", mappedBy="courseid")
*/
private $ratings;
public $avgRating;
}
Dank für Ihre Antwort danken . Wenn ich dich richtig verstehe, dann muss ich einfach eine leere Klasse im Dokumentenordner erstellen und alles auf der Entität machen, die ich bereits habe, aber wenn ich das tue, erhalte ich einen Fehler: "" CoreBundle \ Document \ Course "Klasse kann nicht sein als Dokument analysiert, weil @ Document Annotation fehlt. " Es funktioniert nur, wenn ich diese Klasse auch als Dokument erweitere, aber wird dann nicht einfach nach Feldern in dieser leeren Dokumentklasse gesucht? –
Ich denke, ich habe falsch verstanden, was Sie tun möchten. Wenn Sie eine Doktrinsentität für Elasticsearch beibehalten möchten, die nicht hilft. Wenn Sie eine separate Klasse haben, müssen Sie dennoch Werte von der Entität eingeben. Warum nicht einfach ein separates Dokument mit nur den benötigten Feldern erstellen? – saimaz
Aber wird sich diese Art von Duplikation nicht zu sehr auf die Leistung und die Speichernutzung auswirken? –