Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
+49 (0) 351/850 33-0

SharePoint-Suche: Integration von File Shares aufgepeppt (Teil 2 – Refiner)

In meinem ersten Beitrag zum Thema SharePoint-Suche: Integration von File Shares aufgepeppt habe ich mich nach allgemeinen Überlegungen zur Steigerung des Nutzungserlebnisses durch geschickte Präsentation der Suchergebnisse der Erstellung und Verwendung von Ergebnisquellen, bezogen auf die Suche in File Shares, gewidmet.

Dieser Beitrag befasst sich, wiederum am konkreten Anwendungsfall „Integration von File Shares in die SharePoint-Suche“ mit Konfiguration und  Einsatz von Facettennavigation (Refiner) incl. im Hintergrund lauernder Stolpersteine und anderer potenziell unliebsamen Überraschungen.

Ausgangssituation

Ich rekapituliere kurz den Status zum Ende des vorhergehenden Beitrages:

  • In die SharePoint-Suche integriert ist eine Netzwerkfreigabe “Fileshare for Search” mit vier Ordnern auf oberster Ebene, in denen sich jeweils mehrere Dateien unterschiedlicher Dateitypen (PDF, Visio, Word, …), teils in Unterordnern, befinden.
    Fileshare
  • Es wurde eine vertikale Einschränkung mittels Ergebnisquelle konfiguriert: Im Such-Center wird auf der Ergebnisseite ein Reiter “Fileshare” angezeigt, durch Klick auf diesen Reiter werden die Suchergebnisse auf das File Share eingeschränkt.
    SharePoint-Suche: Suchergebnisseite

Herausforderung

Heute lenken wir unsere Aufmerksamkeit auf nachstehende Punkte:

  • Der Haupt-Ordner, unter dem sich eine Datei befindet (und der die einzelnen Dokumente klassifiziert), ist, wenn überhaupt, nur über die Pfadangabe (Url) im Ergebnis sichtbar. Eine Filterung des Suchergebnisses nach den einzelnen Kategorien (Hauptordnern) ist nicht möglich.
  • Es ist zwar anhand des Icons im Suchergebnis ersichtlich, ob es sich bei dem jeweiligen Ergebnis um eine Datei oder einen Ordner handelt, eine Einschränkung nach Dateien oder Ordnern ist aber nicht möglich.
  • Alternativ oder zusätzlich zur vertikalen wird auch eine horizontale Einschränkung nach der Herkunft (Quelle) des Suchergebnisses gewünscht.

Lösungsansätze

Diese Probleme führen uns unweigerlich zum Thema Facettennavigation (Refiner) und können durch folgende Maßnahmen einer Lösung zugeführt werden:

  • Registerkarte „Alle Ergebnisse (Everything)“
    • Konfiguration eines Refiners nach Herkunft (Inhaltsquelle)
  • Registerkarte „Fileshare“
    • Konfiguration eines Refiners nach Typ (Datei oder Ordner)
    • Konfiguration eines Refiners nach Kategorie (Hauptordner)

Und da dieser Beitrag Im Sinne von KnowHow-Transfer nicht „nur“ eine Lösung herbeiführen, sondern auch unterschiedliche Herangehensweisen beleuchten soll, werden wir verschiedenartige Tools und Techniken einsetzen:

Umsetzung

Der besseren Verständlichkeit halber setze ich für jede Anforderung genau eine der oben genannten Techniken ein. Ich mache aber ausdrücklich darauf aufmerksam, dass dies jeweils nur eine potenzielle Lösung darstellt – alternative Lösungen sind oftmals möglich.

Zuallererst kann es nicht schaden, die offizielle Anleitung vom Microsoft zum Thema Refiner zu studieren. Wir nehmen mit:

  • Managed Properties sind der Dreh- und Angelpunkt für alle Arten von Refinern.
  • Damit eine Managed Property als Refiner verwendet werden kann, müssen die Eigenschaften Refinable auf „Yes-active“ und Queryable auf „True“ gesetzt sein.
  • Managed Properties werden auf Crawled Properties gemappt
    • Dabei kann eine Crawled Property mehreren Managed Properties zugeordnet sein und eine Managed Property kann mehrere Crawled Properties enthalten.
    • Es ist wichtig, dieses Konzept verstanden zu haben! Ggf. lohnt sich noch die Lektüre von Microsofts Überblick zum Suchschema.
  • Änderungen an Managed Properties werden erst nach einem Full Crawl wirksam (!)

Konfiguration eines Refiners nach Herkunft (Inhaltsquelle)

Technik: Verwendung von Managed Properties „pur“

Die erste Herausforderung ist, herauszufinden, ob und ggf. welche Managed bzw. Crawled Properties unsere Anforderung abdecken. Dafür gibt es verschiedene Annäherungen:

In unserem Fall ist dies zum Glück nicht so schwierig: Es gibt eine Managed Propery namens ContentSource, und ein Test mit dem Search Query Tool bestätigt die naheliegende Vermutung, dass es sich dabei um die Inhaltsquelle für die Suche handelt:

Codeplex Search Query Tool

Allerdings ist diese im Standard zwar Queryable, aber nicht Refinable. In einem solchen Fall haben wir zwei Möglichkeiten:

  1. Wir setzen in der Zentraladministration (alternativ via PowerShell) Refinable auf „Yes-active“:
    SharePoint-Suche: Konfiguration Managed Property ContenSource im Suchschema
  2. Wenn wir die Standardkonfiguration für die Managed Property nicht verändern wollen, so können wir auch eine neue Managed Property erstellen und dieser exakt dieselben Crawled Properties zuordnen wie der originalen Managed Property.
    • Anmerkung: in diesem konkreten Fall haben wir an dieser Stelle ein Problem, denn lt, Zentraladministration sind auf die Managed Property „ContentSource“ gar keine Crawled Properties gemappt 😕
    • Wer dennoch diesen Weg beschreiten möchte (und ein gewisses Maß an Schmerz nicht scheut 😉 ), dem sei dieser Blogbeitrag von Mikael Svenson empfohlen.

Ich habe die Variante 1 gewählt.

Nun können wir (nachdem wir den erforderlichen Full Crawl nicht vergessen haben!) die Managed Property im Search Center auf der Ergebnisseite als Refiner hinzufügen:

SharePoint-Suche: Konfiguration Refiner nach Inhaltsquelle 1

SharePoint-Suche: Konfiguration Refiner nach Inhaltsquelle 2

Nachdem wir die Konfiguration für den Refiner und die Seite gespeichert haben, können wir unseren neuen Refiner „Quelle“ in Aktion bewundern:

SharePoint-Suche: Ergebnisseite mit Refiner nach Inhaltsquelle

Anmerkungen für Freaks:

  • Wer sich nicht damit zufriedengeben will, dass die Werte für den Refiner die gleichen Bezeichnungen haben wie die Inhaltsquellen, der kann eine der beiden in den folgenden Abschnitten erläuterten Techniken verwenden, um die Bezeichnungen in der Anzeige anzupassen.
  • Ein weiterer interessanter Ansatz für die gestellte Anforderung wäre, eine neue Managed Property (ich habe sie „Host“ genannt) zu erstellen und die Crawled Property „Basis:4“ darauf mappen
    • Achtung: es gibt 2 mit diesem Namen -> entweder kurzerhand beide zuordnen oder darauf achten, dass jene mit der Property Set ID 0b63e343-9ccc-11d0-bcdb-00805fccce04 erwischt wird
    • Ergebnis: Die Einschränkung nach Ergebnissen vom File Share ist ebenso möglich, die Ergebnisse von SharePoint können aber noch nach einzelnen Site Collections verfeinert werden (auch hier würde sich die Anpassung der Bezeichnungen noch anbieten):
      SharePoint-Suche: Refiner für eigene Managed Propery "Host"

Konfiguration eines Refiners nach Typ (Datei oder Ordner)

Technik: Managed Properties + angepasste Anzeigevorlagen (Display Templates) für Refiner

Mit Hilfe des im vorhergehenden Abschnitt beschriebenen Vorgehens habe ich herausgefunden, dass die Managed Property „IsDocument“ (Typ: Yes/No) für unsere Anforderung in Frage kommt.

Nach Anpassung der Eigenschaft Refiniable auf „Yes – active“ und Full Crawl können wir den Refiner (dieses Mal auf der Ergebnisseite für das File Share) hinzufügen, das Resultat sieht so aus:

SharePoint-Suche und FileShare-Integration: Refiner ohne angepasstes Display Template

Obschon inhaltlich absolut korrekt (Yes=Datei, No=Ordner), ist es doch nicht ganz das, was wir uns vorgestellt haben (bzw. was wir unseren Anwendern anbieten wollen 😯 ). Besser wäre es doch, wenn anstatt „Yes“ und „No“ die entsprechenden Bezeichnungen „Datei“ und „Ordner“ stünden. Dies lässt sich mit einem angepassten Display Template für den Refiner bewerkstelligen.

Die Display Templates für die Refiner finden wir unter > Site Settings > Master Page Gallery > Display Templates > Filters, das Standard-Template ist „Filter_Default.html“. Zu jeder HTML-Datei gibt es eine passende Javascript-Datei. Diese wird automatisch erstellt, wenn eine neue HTML-Datei hochgeladen wird.

Da wir nicht das originale Standard-Template anpassen wollen, laden wir zuerst eine Kopie herunter:

SharePoint-Suche: Download Display Template

Die Kopie habe ich „Filter_Default_Custom.html“ benannt. Diese können wir nun z.B. in einem Text-Editor bearbeiten. Es gibt 2 Stellen, die anzupassen sind:

  1. der Titel des Display Templates: ich habe „Refinement Item Fileshare“ verwendet
  2. die Logik für das Ersetzen der Bezeichnungen
    • dazu suchen wir am besten nach for(var i in listData) (aktuell ist das Zeile 233, könnte sich bei einem SharePoint-Update aber mal ändern)
    • an der aus dem Screenshot ersichtlichen Stelle fügen wir den folgenden Code ein:
      if (ctx.RefinementControl.propertyName == „IsDocument“) {
         listData[i].RefinementName = (listData[i].RefinementValue == „0“? „Folder“ : „File“);
      }

SharePoint-Suche: Anpassung Display Template für Refiner

Das so angepasste Display Template muss nun wieder in die Master Page Gallery hochgeladen werden (der genaue Speicherort ist dabei nebensächlich, SharePoint holt sich die relevanten Informationen aus den Metadaten):

SharePoint-Suche: Upload Display Template 1

Die Metadaten sind schon korrekt ausgefüllt (da wir das Standard-Template kopiert und den Titel bereits angepasst hatten):

SharePoint-Suche: Upload Display Template 2

Achtung, Stolperfalle! Das Display Template muss zum Schluss ggf. noch eingecheckt und veröffentlicht werden, ansonsten können wir das Ergebnis zwar als der Nutzer bewundern, der die Änderungen vorgenommen hat (bzw. als Administrator), aber die Anwender werden nicht in diesen Genuss kommen.

Nun müssen wir nur noch im Refiner-Webpart für den bereits erstellten Refiner „IsDocument“ das neue Display Template auswählen:

SharePoint-Suche: Konfiguration Refiner mit angepasstem Display Template

Das Ergebnis präsentiert sich wie erwartet:

SharePoint-Suche und FileShare-Integration: Ergebnisseite Refiner mit angepasstem Display Template

Konfiguration eines Refiners nach Kategorie (Hauptordner)

Technik: Verwendung von benutzerdefinierten Entitätsextraktionsfunktionen (Custom Entity Extraction)

Um den Umfang des Beitrages nicht (noch mehr) zu sprengen, lagere ich diesen Teil in einen separaten Beitrag aus: SharePoint-Suche: Integration von File Shares aufgepeppt (3 – Custom Entity Extraction)

Sie wollen gleich mit der Integration von File Shares anfangen?

>> Hier gelangen Sie zu den SharePoint-Lizenzen <<

Kommentar hinterlassen


Pin It on Pinterest