Tech-Wissen

Neos ElasticSearchQuery in PHP verwenden

Wer ElasticSearch in Neos verwendet, kann dies natürlich auch in PHP tun. Das bietet nochmal deutlich mehr Filter-Möglichkeiten und steigert die Performance.

Was wird benötigt?

 

Um auch Nodes finden zu können, sollte "./flow nodeindex:build" nach Einrichtung des ContentRepositoryAdaptors einmal ausgeführt werden.

Der Context

Wie bei FlowQuery, brauchen wir auch für ElasticSearch einen Context, um Nodes finden zu können. Um einen solchen zu erstellen, kann die Factory (\Neos\ContentRepository\Domain\Service\ContextFactoryInterface) genutzt werden:

$context = $this->contextFactory->create();

ElasticSearchQuery erstellen

Bevor wir nach bestimmten Kriterien filtern können, wird eine Instanz von "Flowpack\ElasticSearch\ContentRepositoryAdaptor\Eel\ElasticSearchQueryBuilder" erstellt und die Site-Node als Suchbasis übergeben.

$search = new ElasticSearchQueryBuilder();
$search->query($context->getRootNode()); #Equivalent zu ${Search.query(site)}

Nodes suchen

Anschließend können wir Filter auf die Query anwenden und sie letztlich ausführen. Eine Übersicht aller verfügbaren Filter, ist im Package zu finden.

#100 Bilder, sortiert nach alter
$nodes = $search
  ->nodeType('Neos.NodeTypes:Image') #Nach NodeType filtern
  ->sortAsc('_creationDateTime') #Aufsteigende Sortierung nach Zeitpunkt der Erstellung
  ->limit(100) #100 Ergebnisse
  ->execute() #Query ausführen
  ->toArray(); #Ergebnis in Array aus Nodes umwandeln 

Wichtig ist, dass das Limit auf die gewünschte Größe gesetzt wird. Andernfalls gibt ElasticSearch nämlich nur 10 Nodes zurück.

Wenn das Query-Ergebnis nicht in einem Fluid-Template verwendet wird, bietet es meistens "->toArray()" am Ende der Query an. So bekommen wir die Nodes als Array zurück.

Impulsgespräch

Kostenloses Impulsgespräch

Mirko Kaufmann

Ihr Ansprechpartner:
Mirko Kaufmann

info@kaufmann.digital
T: +49-5771-8438930

Nach oben