Entwicklung einer Suche

Es gibt mehrere Möglichkeiten eine Suche zu entwickeln. Die einfachste Möglichkeit, ist die Site Methode getPages($query, $param) zu verwenden. Wird hier als $param Parameter fulltext mit dem Suchbegriff übergeben, wird bereits eine Suche durchgeführt und nur die Seiten zurückgeliefert, auf die dieser Suchbegriff zutrifft.

$results = $site->getPages([], [ 'fulltext' => 'Lorem ipsum' ]);
wb_incandescent

Das funktioniert auch für alle anderen bekannten Site, bzw. Page Methoden, wie getChildren(), getDescendants() und getAncestors().

Geben Sie zusätzlich für $param den Parameter search an, um nur Seiten zu erhalten, die auch in der Suche gefunden werden dürfen.

$results = $site->getPages([], [ 'fulltext' => 'Lorem ipsum', 'search' => true ]);
check

Der Parameter search wird für Suchen im Frontend empfohlen. Suchen im Backend erhalten diesen Parameter in der Regel nicht.

Suche über Ego_Search Objekt

Weitere Möglichkeiten für die Suche ergeben sich, wenn man ein Ego_Search Objekt erzeugt. Dazu wird die start Methode der Ego_Search_Factory Klasse aufgerufen. Je nach verwendeter Search Engine ergeben sich hier mehr oder weniger Möglichkeiten.

$search = Ego_Search_Factory::start();

Der erste Parameter der Methode start ist optional und ist standardmäßig die Tabellenbezeichung des aktuellen globalen Site Objekts, z.B. "demo_de" (in diesem Beispiel findet die Suche im Mandanten demo in der Sprache de statt). Falls Sie ein anderes Site Objekt verwenden, können Sie die Tabellenbezeichnung auch übergeben.

$search = Ego_Search_Factory::start($site->pageTable);

Der zweite Parameter $param wird nur für die Search Engines Lucene und Elasticsearch ausgewertet. Hier können bereits, ähnlich dem $param für die Site Methode getPages(), Parameter für die Eingrenzung der Suchtreffer übergeben werden. Im Gegensatz zu $param bei z.B. der getPages() Methode, werden diese Parameter bereits bei der Lucene/Elasticsearch Suche berücksichtigt und filtern das Ergebnis:

  • only_active: Nur aktive Seiten finden.
  • deleted oder deleted_or: Auch gelöschte Seiten finden.
  • search: Nur Seiten finden, die in der Suche gefunden werden dürfen.
$search = Ego_Search_Factory::start($site->pageTable, [ 'search' => true ]);

Eine normale Suche wird über die Methode search() gestartet. Als Ergebnis erhalten Sie ein Array mit allen Parametern, die Sie z.B. einem getPages() übergeben können.

$results = $site->getPages($search->search('Lorem ipsum', "{$site->pageTable}.id", $query));

Der erste Parameter ist der Suchbegriff. Der zweite Parameter ist die SQL Relation für den erzeugten Query. Das ist in der Regel die betroffene Datenbanktabelle und darin das Feld "id". Der dritte Parameter ist ein bestehendes $query Array, das in der Methode erweitert und zurückgeliefert wird.

Filter anwenden

Optional können Sie als vierten Parameter einen Lucene Filter angeben. Dieser folgt der Lucene Syntax und gilt für die Search Engines Lucene und Elasticsearch.

Ähnlichkeitssuche

Optional können Sie über den fünften Parameter die Ähnlichkeitssuche aktivieren (Boolean true).

Globale Suche

Für eine Suche in mehreren Mandanten gleichzeitig wird die Methode globalSearch() aufgerufen. Diese erwartet als zweiten Parameter ein Array mit allen Site Objekten, in den durchsucht werden soll. Wird der zweite Parameter nicht oder leer übergeben, werden alle Mandanten durchsucht. Hier kann optional als dritter Parameter $query und vierter $param übergeben werden, die innerhalb dieser Methode für die getPages() Aufrufe verwendet werden.

$result = $search->globalSearch('Lorem ipsum'); // alle Mandanen $result = $search->globalSearch('Lorem ipsum', [$site]); // nur bestimmte Mandanen $result = $search->globalSearch('Lorem ipsum', Ego_System::getAllSites('', '', false, 'content')); // nur Desktop Mandanen $result = $search->globalSearch('Lorem ipsum', Ego_System::getAllSites('', '', false, 'media')); // nur Multimedia Mandanen

Vorschläge für Suchbegriff

Nutzen Sie die Methode getCorrections() um für den angegebenen Suchbegriff Vorschläge zu liefern. Zurückgeliefert wird ein Array mit standardmäßig maximal 3 Vorschlägen. Falls keine Vorschläge gefunden werden, wird ein leeres Array geliefert.

Für diese Methode ist der erste Parameter der Suchbegriff und optional der zweite Parameter eine Liste mit Site Objekten, für die die Vorschläge berücksichtigt werden. Wird der zweite Parameter nicht übergeben, wird nur im aktuellen Mandanten, bzw. der Datenbanktabelle gesucht, die für Ego_Search_Factory::start() verwendet wurde. Über den dritten Parameter kann optional die maximale Anzahl an Vorschlägen geändert werden (Standard 3).

$corrections = $search->getCorrections('Lorem ipsum');

Die einzelnen Vorschläge sind ebenfalls Arrays mit folgenden Eigenschaften. Die einzelnen Vorschläge sind absteigend nach der Eigenschaft score sortiert:

  • text: Der Vorschlag.
  • highlighted: Der Vorschlag mit HTML. Dabei wird um das vorgeschlagene Wort das HTML <em>...</em> gesetzt.
  • score: Die Bewertung des Vorschlags.

Ein Template, dass die Vorschläge auswertet, könnte so aussehen:

{if $corrections && $corrections|@count > 0} <div class="search-corrections">{strip} <span>{t}Stattdessen suchen nach{/t}: </span> {foreach from=$corrections item="correction" name="correction"} <a href="{page_url search_string=$correction.text submit="suchen"}">{$correction.highlighted}</a> {if !$smarty.foreach.correction.last}, {/if} {/foreach} {/strip}</div> {/if}
wb_incandescent

Die Vorschläge für Suchbegriffe werden nur von der Search Engine Elasticsearch untersützt. Alle anderen liefern immer ein leeres Array.