So setzen Sie Filter in den Suchergebnissen ein

Dieser Artikel beschreibt, wie Sie Suchergebnisse über bestimmte Filter laufen lassen, damit aus dem erstellten Suchindex nur die gewünschten Bereiche angezeigt werden.

Die BASE nutzt zum Modul Volltextsuche hinsichtlich der Suchergebnisse die Ausgabe über die Weblication® Listenfunktion. Somit sind Sie sehr flexibel, was die Manipulation der Suchergebnisse angeht. Ein Suchindex lässt sich auf diese Weise in unterschiedlicher Form über die Suchergebnisliste ausgeben. So können Sie von den indizierten Dateien z.B. nur die aus einem bestimmten Bereich (Sprachbereich, Dokumente, etc.) oder nur Binärdokumente ausgeben.

Ergebnisse auf Verzeichnis Bereich einschränken

Das Strukturelement für die Volltextsuche ("Volltextsuche Ergebnis mit Suchfeld") liefert Ihnen bereits im Standard die Möglichkeit, nur Ergebnisse aus dem festgelegten Bereich anzuzeigen ("Nur Ergebnisse aus folgendem Bereich anzeigen").

Volltextsuche - Strukturelement Suchergebnis mit Einstellungsmöglichkeiten

Listen-Filter über Standard Listenoptionen nutzen

Mit aktuellem Volltextsuche Weblic® bietet die Maske bereits im Standard die Möglichkeit, Filter hinzuzufügen (siehe auch Weblics® Portal "Volltextsuche").

Listen-Filter über Maske nutzen

Volltextsuche - Strukturelement Suchergebnis mit Filter auf Pfade

Mit dem Mobile First Weblic® Volltextsuche ab CMS-Version 16 liefert das Strukturelement "Volltextsuche Ergebnis mit Suchfeld" bereits im Standard eine Filteroption nach Pfaden. Diese ermöglicht ein Bereitstellen einer Auswahlbox zum Suchfeld, welches die Seitenbesucher zum weiteren Filtern und somit einschränken der Suchergebnisse heranziehen kann.

Die Auswahlbox kann per Checkbox aktiviert werden und für die Auswahlbox können die Filterwerte individuell angegeben werden. Als Wert pro Filter sind reguläre Ausdrücke möglich, womit man sehr flexibel auf unterschiedlichste Pfadangaben filtern kann.

Beispiele:

  • \.pdf$
    Es werden nur Suchergebnisse angezeigt, welche im Dateipfad auf die Dateiendung .pdf enden.
  • \.(pdf|doc)$
    Es werden nur Suchergebnisse angezeigt, welche im Dateipfad auf die Dateiendung .pdf oder .doc enden.
  • ^/wDeutsch/aktuelles/meldungen/
    Es werden nur Suchergebnisse angezeigt, welche im Dateipfad mit /wDeutsch/aktuelles/meldungen/ beginnen.

Ab CMS-Version 17 steht zusätzlich eine "Häufig gesucht" Funktion zur Verfügung. Die Suche-Maske wurde daher auf  Register aufgeteilt:

  • Allgemein
    Allgemeine Einstellungen zur Suche
  • Suchfilter für Besucher
    Einstellungsmöglichkeiten für Suchfilter, wie auch oben beschrieben.
  • Links zu häufig gesuchten Seiten
    Einstellungsmöglichkeiten für häufig gesuchte Seiten
    (z.B. "Aktuelle Meldungen" über: /wDeutsch/aktuelles/index.php)
Volltextsuche - Strukturelement Suchergebnis - Allgemein
Volltextsuche - Strukturelement Suchergebnis - Suchfilter
Volltextsuche - Strukturelement Suchergebnis - Häufig gesucht

Listen-Filter über Template manuell setzen

Nachfolgend ein Beispiel, um vom Suchindex nur diverse Binärdokumente (z.B. doc, pdf, xls) über die Suchergebnisse auszugeben. Setzen Sie hierzu über das Suche-Item einen Filter, der auf die Dateiendung der gefundenen Dateien prüft. Wenn Sie dies noch zusätzlich mit einer Abfrage versehen, welche den Filter nur anwendet, wenn ein bestimmter GET-Parameter im Aufruf gesetzt ist (z.B. searchoptions=onlyoffice), können Sie über ein Element verschiedene Suchausgaben ermöglichen.

Das Beispiel zeigt z.B. weiterhin an, wie Sie die Suchergebnisse sprachabhängig filtern.

Der Filter wird auch bei der Anzeige der  "Anzahl der Treffer" berücksichtigt, indem Sie dies im Zeilentemplate der Suche über data[@name='numberFiles'] auslesen (siehe unten).

Beispiel: Auszug aus der search.standard.wItem.php

...
<wsl:php>
...
  $listParameters['filterset'] = array('type' =&gt; 'and');
...
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'onlyoffice'">
    $filterFiletypes = array('type' =&gt; 'or');
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "pdf");
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "doc");
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@extension", "operator" =&gt; "containsi", "condition" =&gt; "xls");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'de'">
    $filterFiletypes = array('type' =&gt; 'or'); 
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@path", "operator" =&gt; "containsi", "condition" =&gt; "/de/");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
  
  <xsl:if test="php:functionString('wRequest::getParameter', 'searchoptions') = 'en'">
    $filterFiletypes = array('type' =&gt; 'or'); 
                     
    $filterFiletypes[] = array("wPath" =&gt; "/wd:stat/@path", "operator" =&gt; "containsi", "condition" =&gt; "/en/");

    $listParameters['filterset'][] = $filterFiletypes;
  </xsl:if>
...
  
  print wList::createList($template, $listParameters);
...
</wsl:php>

Beispiel: Auszug aus der search.wFilelist.php (Suche Zeilentemplate)

...
<!-- Suchmaske -->
<form name="frmSearchInner" method="get" action="">
  <div>
    <label for="searchTerm" class="invisible"><xsl:value-of select="php:functionString('wTexts::getText', 'search_term')"/></label>
    <input type="text" name="searchTerm" value="{//data[@name='term']/text()}" style="margin-right:5px"/>
    <select name="searchoptions">
      <option value="all">Alle Ergebnisse</option>
      <option value="onlyoffice">Nur DOC/PDF/XLS</option>
      <option value="de">Deutschsprachige Ergebnisse</option>
      <option value="en">Englischsprachige Ergebnisse</option>
    </select>
    <button type="submit" style="margin-right:5px;"><xsl:value-of select="php:functionString('wTexts::getText', 'search_execute_search')"/></button>
  </div>
</form>
...
        
      
      <xsl:choose>
        <!-- Falls Ergebnisse gefunden wurden -->
        <xsl:when test="number(//data[@name='numberResultsSearch']/text()) &gt; 0">
          <p>
            <xsl:value-of select="php:functionString('wTexts::getText', 'search_number_results')"/>: <xsl:value-of select="//data[@name='numberFiles']/text()"/>
          </p>
        </xsl:when>                                                                                                                    
        <!--Falls keine Ergebnisse gefunden wurden-->
        <xsl:otherwise>
        ...

Nach Abschicken des Suchbegriffes über das Sucheformular kann eine aufgerufene URL dann z.B. wie folgt aussehen (Übergabe der GET-Parameter):
http://domain.dd/IhrProjekt/suche/index.php?searchTerm=weblication&searchoptions=en