Wie zum ausführen von verschachtelten Abfragen mit Elastica-Suche und Symfony2
Habe ich ein Rezept Entität, die einige tags (viele zu viele mapping) und ich wollen Suche Rezepte von tags.
Hier ist mein Rezept entity:
/**
* @ORM\Entity
* @ORM\Table(name="recipes")
* @ORM\HasLifecycleCallbacks
* @ExclusionPolicy("all")
*/
class Recipe
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @Expose
*/
protected $id;
/**
* @ORM\Column(type="string", length=150)
* @Expose
*/
protected $name;
...
/**
* @ORM\ManyToMany(targetEntity="RecipesTag", inversedBy="recipes")
* @ORM\JoinTable(name="bind_recipes_tags",
* joinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="recipe_id", referencedColumnName="id")}
* )
*/
private $tags;
Hier ist meine config:
fos_elastica:
clients:
default: { host: localhost, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
td:
client: default
types:
Recipe:
mappings:
name: ~
ingredients:
type: "nested"
properties:
name: ~
tags:
type: "nested"
properties:
name: ~
id :
type : integer
categories:
type: "nested"
properties:
name: ~
id :
type : integer
persistence:
driver: orm # orm, mongodb, propel are available
model: ck\RecipesBundle\Entity\Recipe
repository: ck\RecipesBundle\Entity\RecipesRepository
provider: ~
listener: ~
finder: ~
Fügte ich ein benutzerdefiniertes repository zu Recherchen:
public function filterFind($searchText)
{
$query_part = new \Elastica\Query\Bool();
$nested = new \Elastica\Query\Nested();
$nested->setQuery(new \Elastica\Query\Term(array('name' => array('value' => $searchText))));
$nested->setPath('tags');
$query_part->addShould($nested);
return $this->find($query_part);
}
Dann Suche ich so :
$repositoryManager = $this->get('fos_elastica.manager.orm');
$repository = $repositoryManager->getRepository('ckRecipesBundle:Recipe');
$recipes = $repository->filterFind('mytag');
Aber ich habe keine Ergebnisse überhaupt trotz der Tatsache, dass es übereinstimmende Ergebnisse.
Ich fand keine Antworten auf google.
Wer kann mir helfen ?
- hast du resovled es? ist die Antwort gut?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, Sie haben vergessen zu definieren, die Gefilterte Abfrage.
Sollte dies funktionieren :
Hier ist die Antwort, wie es zu tun. Für mich funktioniert es. http://obtao.com/blog/2014/04/elasticsearch-advanced-search-and-nested-objects/
Im Grunde, müssen Sie die Abfrage erstellen möchten, die:
Für mich in PHP so Aussehen:
Filter Elastica\Filter und Abfrage Elastica\Query