Diese Anforderung eines Kunden hatte unser Interesse geweckt:

Wie kann man den Taxonomie-Speicher auslesen und eine Auswertung über die verwendeten Schlagworte laufen lassen?

Die Antwort ist recht simpel: programmatisch mit Hilfe der SharePoint Search API!

Wir entwickelten auf dieser Basis also eine Console-Applikation, die hier heruntergeladen werden kann: HanseVision.Taxonomy.Analyzer

Die Anwendung muss auf einem Server der SharePoint Farm ausgeführt werden. Der ausführende Benutzer muss über die nötigen Administrator-Berechtigungen verfügen. Die Verwendung ist einfach:  HanseVision.Taxonomy.Analyzer.exe <search site url>

Für den Parameter <search site url> muss die Url der Site angegeben werden, in der die Suche konfiguriert ist.

Nach der Ausführung des Tools wird eine CSV-Datei generiert, die z.B. mit Hilfe von Microsoft Excel eingelesen und grafisch ausgewertet werden kann. Das könnte dann z.B. so aussehen:

image

 

Nun noch ein kleiner Einblick in das Innenleben der Anwendung:

Zuerst wird der Taxonomie-Speicher geladen und durch alle Terme durchiteriert:

using (SPSite site = new SPSite(args[0]))
{
    SPServiceContext context = SPServiceContext.GetContext(site);
    SearchServiceApplicationProxy searchApplicationProxy = 
        context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;
    query = new FullTextSqlQuery(site); // außerhalb definiert
    query.ResultTypes = ResultType.RelevantResults;
    query.TrimDuplicates = false;
    query.RowLimit = 1;
    scopeName = searchApplicationProxy.GetScopeInfo(1).Name;    // außerhalb definiert

    TaxonomySession session = new TaxonomySession(site);

    foreach (TermStore termStore in session.TermStores)
    {
        foreach (Group group in termStore.Groups)
        {
            foreach (TermSet termSet in group.TermSets)
            {
                foreach (Term term in termSet.Terms)
                {
                    PopulateTerm(term, termSet.Name);
                }
            }
        }
    }
}

Mit Hilfe eines StreamWriters werden die Informationen der einzelnen Terms in die CSV-Textdatei ausgegeben.

Da jeder Term weiterhin beliebig viele Kind-Elemente enthalten kann, müssen diese ebenfalls mit Hilfe von Rekursion durchsucht werden:

private static void PopulateTerm(Term term, string parentPath)
{
    int result = ExecuteSearch(term.Id);

    // Ausgabe der Term-Informationen in einen vorher definierten StreamWriter
    streamWriter.WriteLine(string.Format("{0}\t{1}\t{2}\t{3}\t{4}:{5}\t{6}", term.Id, term.Name,
        term.TermSet.Group.Name, term.TermSet.Name, parentPath, term.Name, result));

    foreach (Term childTerm in term.Terms)
    {
        PopulateTerm(childTerm, string.Format("{0}:{1}", parentPath, term.Name));
    }
}

Die Suche nach dem vergebenen Schlagwort wird wie bereits angedeutet mit Hilfe der SharePoint Search API durchgeführt. Dazu wird die vorher definierte FullTextSqlQuery genutzt:

private static int ExecuteSearch(Guid termId)
{
    query.QueryText = string.Format(
        "SELECT Title FROM SCOPE() WHERE \"scope\"='{0}' AND owstaxIdMetadataAllTagsInfo = '#0{1}'",
        scopeName, termId);

    ResultTableCollection queryResults = query.Execute();
    ResultTable queryResultsTable = queryResults[ResultType.RelevantResults];
    return queryResultsTable.TotalRows;
}

Nachtrag:

Das Tool und der Code können nur in Verbindung mit der SharePoint Search verwendet werden. Die FAST Search arbeitet nicht mit der FullTextSqlQuery zusammen. Sie muss an der entsprechende Stelle durch die KeywordQuery ersetzt werden.


 

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.