Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

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

In mei­nem ers­ten Beitrag zum Thema SharePoint-Suche: Integration von File Shares auf­ge­peppt habe ich mich nach all­ge­mei­nen Überlegungen zur Steigerung des Nutzungserlebnisses durch geschickte Präsentation der Suchergebnisse der Erstellung und Verwendung von Ergebnisquellen, bezo­gen auf die Suche in File Shares, gewid­met.

Dieser Beitrag befasst sich, wie­derum am kon­kre­ten Anwendungsfall "Integration von File Shares in die SharePoint-Suche" mit Konfiguration und  Einsatz von Facettennavigation (Refiner) incl. im Hintergrund lau­ern­der Stolpersteine und ande­rer poten­zi­ell unlieb­sa­men Überraschungen.

Ausgangssituation

Ich reka­pi­tu­liere kurz den Status zum Ende des vor­her­ge­hen­den Beitrages:

  • In die SharePoint-Suche inte­griert ist eine Netzwerkfreigabe “Fileshare for Search” mit vier Ordnern auf obers­ter Ebene, in denen sich jeweils meh­rere Dateien unter­schied­li­cher Dateitypen (PDF, Visio, Word, …), teils in Unterordnern, befin­den.
    Fileshare
  • Es wurde eine ver­ti­kale Einschränkung mit­tels Ergebnisquelle kon­fi­gu­riert: Im Such-Center wird auf der Ergebnisseite ein Reiter “Fileshare” ange­zeigt, durch Klick auf die­sen Reiter wer­den die Suchergebnisse auf das File Share ein­ge­schränkt.
    SharePoint-Suche: Suchergebnisseite

Herausforderung

Heute len­ken wir unsere Aufmerksamkeit auf nach­ste­hende Punkte:

  • Der Haupt-Ordner, unter dem sich eine Datei befin­det (und der die ein­zel­nen Dokumente klas­si­fi­ziert), ist, wenn über­haupt, nur über die Pfadangabe (Url) im Ergebnis sicht­bar. Eine Filterung des Suchergebnisses nach den ein­zel­nen Kategorien (Hauptordnern) ist nicht mög­lich.
  • Es ist zwar anhand des Icons im Suchergebnis ersicht­lich, ob es sich bei dem jewei­li­gen Ergebnis um eine Datei oder einen Ordner han­delt, eine Einschränkung nach Dateien oder Ordnern ist aber nicht mög­lich.
  • Alternativ oder zusätz­lich zur ver­ti­ka­len wird auch eine hori­zon­tale Einschränkung nach der Herkunft (Quelle) des Suchergebnisses gewünscht.

Lösungsansätze

Diese Probleme füh­ren uns unwei­ger­lich zum Thema Facettennavigation (Refiner) und kön­nen durch fol­gende Maßnahmen einer Lösung zuge­führt wer­den:

  • 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 die­ser Beitrag Im Sinne von KnowHow-Transfer nicht "nur" eine Lösung her­bei­füh­ren, son­dern auch unter­schied­li­che Herangehensweisen beleuch­ten soll, wer­den wir ver­schie­den­ar­tige Tools und Techniken ein­set­zen:

Umsetzung

Der bes­se­ren Verständlichkeit hal­ber setze ich für jede Anforderung genau eine der oben genann­ten Techniken ein. Ich mache aber aus­drück­lich dar­auf auf­merk­sam, dass dies jeweils nur eine poten­zi­elle Lösung dar­stellt – alter­na­tive Lösungen sind oft­mals mög­lich.

Zuallererst kann es nicht scha­den, die offi­zi­elle Anleitung vom Microsoft zum Thema Refiner zu stu­die­ren. Wir neh­men mit:

  • Managed Properties sind der Dreh- und Angelpunkt für alle Arten von Refinern.
  • Damit eine Managed Property als Refiner ver­wen­det wer­den kann, müs­sen die Eigenschaften Refinable auf "Yes-active" und Queryable auf "True" gesetzt sein.
  • Managed Properties wer­den auf Crawled Properties gemappt
    • Dabei kann eine Crawled Property meh­re­ren Managed Properties zuge­ord­net sein und eine Managed Property kann meh­rere Crawled Properties ent­hal­ten.
    • Es ist wich­tig, die­ses Konzept ver­stan­den zu haben! Ggf. lohnt sich noch die Lektüre von Microsofts Überblick zum Suchschema.
  • Änderungen an Managed Properties wer­den erst nach einem Full Crawl wirk­sam (!)

Konfiguration eines Refiners nach Herkunft (Inhaltsquelle)

Technik: Verwendung von Managed Properties "pur"

Die erste Herausforderung ist, her­aus­zu­fin­den, ob und ggf. wel­che Managed bzw. Crawled Properties unsere Anforderung abde­cken. Dafür gibt es ver­schie­dene Annäherungen:

In unse­rem Fall ist dies zum Glück nicht so schwie­rig: Es gibt eine Managed Propery namens ContentSource, und ein Test mit dem Search Query Tool bestä­tigt die nahe­lie­gende Vermutung, dass es sich dabei um die Inhaltsquelle für die Suche han­delt:

Codeplex Search Query Tool

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

  1. Wir set­zen in der Zentraladministration (alter­na­tiv 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­än­dern wol­len, so kön­nen wir auch eine neue Managed Property erstel­len und die­ser exakt die­sel­ben Crawled Properties zuord­nen wie der ori­gi­na­len Managed Property.
    • Anmerkung: in die­sem kon­kre­ten Fall haben wir an die­ser Stelle ein Problem, denn lt, Zentraladministration sind auf die Managed Property "ContentSource" gar keine Crawled Properties gemappt 😕
    • Wer den­noch die­sen Weg beschrei­ten möchte (und ein gewis­ses Maß an Schmerz nicht scheut 😉 ), dem sei die­ser Blogbeitrag von Mikael Svenson emp­foh­len.

Ich habe die Variante 1 gewählt.

Nun kön­nen wir (nach­dem wir den erfor­der­li­chen Full Crawl nicht ver­ges­sen haben!) die Managed Property im Search Center auf der Ergebnisseite als Refiner hin­zu­fü­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 gespei­chert haben, kön­nen wir unse­ren neuen Refiner "Quelle" in Aktion bewun­dern:

SharePoint-Suche: Ergebnisseite mit Refiner nach Inhaltsquelle

Anmerkungen für Freaks:

  • Wer sich nicht damit zufrie­den­ge­ben will, dass die Werte für den Refiner die glei­chen Bezeichnungen haben wie die Inhaltsquellen, der kann eine der bei­den in den fol­gen­den Abschnitten erläu­ter­ten Techniken ver­wen­den, um die Bezeichnungen in der Anzeige anzu­pas­sen.
  • Ein wei­te­rer inter­es­san­ter Ansatz für die gestellte Anforderung wäre, eine neue Managed Property (ich habe sie "Host" genannt) zu erstel­len und die Crawled Property "Basis:4" dar­auf map­pen
    • Achtung: es gibt 2 mit die­sem Namen -> ent­we­der kur­zer­hand beide zuord­nen oder dar­auf ach­ten, 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ög­lich, die Ergebnisse von SharePoint kön­nen aber noch nach ein­zel­nen Site Collections ver­fei­nert wer­den (auch hier würde sich die Anpassung der Bezeichnungen noch anbie­ten):
      SharePoint-Suche: Refiner für eigene Managed Propery "Host"

Konfiguration eines Refiners nach Typ (Datei oder Ordner)

Technik: Managed Properties + ange­passte Anzeigevorlagen (Display Templates) für Refiner

Mit Hilfe des im vor­her­ge­hen­den Abschnitt beschrie­be­nen Vorgehens habe ich her­aus­ge­fun­den, 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ön­nen wir den Refiner (die­ses Mal auf der Ergebnisseite für das File Share) hin­zu­fü­gen, das Resultat sieht so aus:

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

Obschon inhalt­lich abso­lut kor­rekt (Yes=Datei, No=Ordner), ist es doch nicht ganz das, was wir uns vor­ge­stellt haben (bzw. was wir unse­ren Anwendern anbie­ten wol­len 😯 ). Besser wäre es doch, wenn anstatt "Yes" und "No" die ent­spre­chen­den Bezeichnungen "Datei" und "Ordner" stün­den. Dies lässt sich mit einem ange­pass­ten Display Template für den Refiner bewerk­stel­li­gen.

Die Display Templates für die Refiner fin­den wir unter > Site Settings > Master Page Gallery > Display Templates > Filters, das Standard-Template ist "Filter_Default.html". Zu jeder HTML-Datei gibt es eine pas­sende Javascript-Datei. Diese wird auto­ma­tisch erstellt, wenn eine neue HTML-Datei hoch­ge­la­den wird.

Da wir nicht das ori­gi­nale Standard-Template anpas­sen wol­len, laden wir zuerst eine Kopie her­un­ter:

SharePoint-Suche: Download Display Template

Die Kopie habe ich "Filter_Default_Custom.html" benannt. Diese kön­nen wir nun z.B. in einem Text-Editor bear­bei­ten. Es gibt 2 Stellen, die anzu­pas­sen sind:

  1. der Titel des Display Templates: ich habe "Refinement Item Fileshare" ver­wen­det
  2. die Logik für das Ersetzen der Bezeichnungen
    • dazu suchen wir am bes­ten nach for(var i in listData) (aktu­ell ist das Zeile 233, könnte sich bei einem SharePoint-Update aber mal ändern)
    • an der aus dem Screenshot ersicht­li­chen Stelle fügen wir den fol­gen­den 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 ange­passte Display Template muss nun wie­der in die Master Page Gallery hoch­ge­la­den wer­den (der genaue Speicherort ist dabei neben­säch­lich, SharePoint holt sich die rele­van­ten Informationen aus den Metadaten):

SharePoint-Suche: Upload Display Template 1

Die Metadaten sind schon kor­rekt aus­ge­füllt (da wir das Standard-Template kopiert und den Titel bereits ange­passt hat­ten):

SharePoint-Suche: Upload Display Template 2

Achtung, Stolperfalle! Das Display Template muss zum Schluss ggf. noch ein­ge­checkt und ver­öf­fent­licht wer­den, ansons­ten kön­nen wir das Ergebnis zwar als der Nutzer bewun­dern, der die Änderungen vor­ge­nom­men hat (bzw. als Administrator), aber die Anwender wer­den nicht in die­sen Genuss kom­men.

Nun müs­sen wir nur noch im Refiner-Webpart für den bereits erstell­ten Refiner "IsDocument" das neue Display Template aus­wäh­len:

SharePoint-Suche: Konfiguration Refiner mit angepasstem Display Template

Das Ergebnis prä­sen­tiert sich wie erwar­tet:

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

Konfiguration eines Refiners nach Kategorie (Hauptordner)

Technik: Verwendung von benut­zer­de­fi­nier­ten Entitätsextraktionsfunktionen (Custom Entity Extraction)

Um den Umfang des Beitrages nicht (noch mehr) zu spren­gen, lagere ich die­sen Teil in einen sepa­ra­ten Beitrag aus: SharePoint-Suche: Integration von File Shares auf­ge­peppt (3 – Custom Entity Extraction)

Sie wol­len gleich mit der Integration von File Shares anfan­gen?

>> Hier gelan­gen Sie zu den SharePoint-Lizenzen <<

Related Posts

Pin It on Pinterest