Freigeben über


Abfrageeinschränkung in SharePoint

In diesem Artikel erfahren Sie, wie Sie die SharePoint-Features zur Abfrageeinschränkung bei der Arbeit mit Suchabfragen und Suchergebnissen programmgesteuert einsetzen können.

Features zum Einschränken von Abfragen geben dem Benutzer relevante Einschränkungsoptionen für seine Abfragen an die Hand. Der Benutzer kann damit einen Drilldown in die Suchergebnisse ausführen, indem er für die Ergebnisse berechnete Einschränkungsdaten verwendet. Einschränkungsdaten werden durch die Indexkomponente basierend auf der Aggregation von Statistiken für verwaltete Eigenschaften für alle Ergebnisse einer Suchabfrage berechnet.

Die Abfrageeinschränkung wird typischerweise für Metadaten verwendet, die den indizierten Elementen zugeordnet sind, z. B. das Erstellungsdatum, der Autor und Personennamen, die in dem Element vorhanden sind. Mit den entsprechenden Einschränkungsoptionen können Sie eine Abfrage so präzisieren, dass nur Elemente dargestellt werden, die innerhalb einer bestimmten Zeitspanne erstellt wurden oder einen bestimmten Dateityp aufweisen.

Verwenden von Einschränkungen im Abfrageobjektmodell

An der Abfrageeinschränkung sind zwei Abfragen beteiligt:

  1. Sie können anfordern, dass eine Reihe von Einschränkungen in den Suchergebnissen zurückgegeben wird, indem Sie eine Einschränkungsspezifikation zu der Abfrage des Benutzers hinzufügen. Eine Einschränkungsspezifikation ist die Eingabe für die Refiners -Eigenschaft. Diese Abfrage wird gegen den Suchindex ausgeführt. Die Suchergebnisse bestehen aus relevanten Ergebnissen und Einschränkungsdaten.
  2. Sie können die Einschränkungsdaten verwenden, um einen Drilldown in die Suchergebnisse auszuführen, indem Sie eine eingeschränkte Abfrage erstellen. Fügen Sie die RefinementFilters-Eigenschaft zu der Abfrage hinzu, sodass die endgültigen Suchergebnisse sowohl den Anforderungen des ursprünglichen Abfragetexts des Benutzers als auch der ausgewählten Einschränkungsoption aus den Einschränkungsdaten entspricht.

In den folgenden Abschnitten werden diese Schritte ausführlich beschrieben un Codebeispiele bereitgestellt.

Hinzufügen von Einschränkungen zu der Abfrage des Benutzers mithilfe von Einschränkungsspezifikationen

Sie können die angeforderten Abfrageeinschränkungen mithilfe der Refiners -Eigenschaft der KeywordQuery -Klasse angeben. Verwenden Sie die folgende Syntax, um die angeforderten Abfrageeinschränkungen anzugeben:

<refiner>[,<refiner>]*

Jede refiner weist das folgende Format auf:

<refiner-name>[(parameter=value[,parameter=value]*)]?

Dabei gilt Folgendes:

  • <refiner-name> ist der Name der verwalteten Eigenschaft, die der Einschränkung zugeordnet ist. Diese verwaltete Eigenschaft muss im Suchschema auf Refinable oder Sortable festgelegt sein.
  • Die optionale Liste von parameter=value-Paaren gibt die nicht standardmäßigen Konfigurationswerte für die benannte Einschränkung an. Wenn ein Parameter für eine Einschränkung nicht innerhalb der Klammern aufgeführt ist, erhalten Sie von der Suchschemakonfiguration die Standardeinstellung. In Tabelle 1 sind mögliche Werte für die parameter=value-Paare aufgeführt.

Hinweis

Bei der Angabe von Einschränkungen müssen Sie zumindest einen Wert refiner-name angeben, also eine verwaltete Eigenschaft.

Beispiel

Refiners = "FileType"

Sie können auch die erweiterte Syntax verwenden, um die Einschränkungseinstellungen anzupassen:

Refiners = "FileType,Write(discretize=manual/2013-01-01/2013-08-22/2013-09-15/2013-09-21/2013-09-22),companies"

Tabelle 1: Liste von Parametern für Einschränkungen

Parameter Beschreibung
deephits
Überschreibt die standardmäßige Anzahl von Treffern, die als Grundlage für die Berechnung der Einschränkung verwendet wird. Wenn Einschränkungen erstellt werden, werden alle Ergebnisse für die Abfrage ausgewertet. Bei Verwendung dieses Parameters wird in der Regel die Suchleistung verbessert.
Syntax
deephits=<integer value>
Beispiel
price(deephits=1000)
Hinweis: Diese Grenze gilt innerhalb jeder Indexpartition. Die tatsächliche Anzahl von Treffern, die ausgewertet werden, ist aufgrund der Aggregation über Suchpartitionen hinweg größer als dieser Wert.
discretize
Legt benutzerdefinierte Intervalle (Einschränkungsbins) für numerische Einschränkungen fest.
Syntax
discretize=manual/<threshold>/<threshold>[/<threshold>]*
Beispiel
write(discretize=manual/2013-01-01/2013-08-22/2013-09-15/2013-09-21/2013-09-22)
Das Attribut <threshold> gibt den Schwellenwert für die einzelnen Einschränkungsbins an.
Es gibt ein Intervall für alle Elemente unterhalb des ersten angegebenen Schwellenwerts, ein Intervall zwischen jedem aufeinanderfolgenden Schwellenwert, und ein Intervall für alle Elemente überhalb dem letzten Schwellenwert.
Für eine Einschränkung des Typs DateTime geben Sie den Schwellenwert gemäß einem der folgenden ISO 8601-kompatiblen Formate an:
  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss
  • YYYY-MM-DDThh:mm:ss:Z
Die Formatwerte geben Folgendes an:
  • YYYY - Vierziffrige Jahresangabe. Es werden nur vierziffrige Jahresangaben unterstützt.
  • MM - Zweiziffriger Monat. 01 = Januar.
  • DD - Zweiziffriger Tag des Monats (01 bis 31).
  • T - Den Buchstaben „T".
  • hh - Zweiziffrige Stundenangabe (00 bis 23). Die Angabe von A.M. oder P.M. ist nicht zulässig.
  • mm - Zweiziffrige Minutenangabe (00 bis 59).
  • ss - zweiziffrige Sekundenangabe (00 bis 59)
Wichtig:: Alle Datums-/Zeitwerte müssen gemäß der UTC (Coordinated Universal Time) angegeben werden, auch als GMT(Greenwich Mean Time)-Zeitzone bekannt. Der UTC-Zeitzonenbezeichner (nachfolgendes „Z") ist optional.
sort
Legt die Sortierreihenfolge der Bins in einer Einschränkung des Typs „String“ fest.
Syntax
sort=<property>/<direction>
Die Attribute tun Folgendes:
  • <property> - Gibt den Sortieralgorithmus an. Die folgenden Werte in Kleinbuchstaben sind gültig:
    • frequency - Sortiert nach Anzahl der Vorkommen innerhalb der Bins.
    • name - Anordnung nach Bezeichnungsname.
    • number - Behandelt die Zeichenfolgen als numerisch und verwendet die numerische Sortierung. Dieser Wert kann hilfreich sein, um diskrete Werte anzugeben, beispielsweise, um eine numerische Sortierung für einen Wert auszuführen, der in einer verwalteten Eigenschaft des Typs String enthalten ist.
  • <direction> - Gibt die Sortierrichtung an. Die folgenden Werte in Kleinbuchstaben sind gültig:
    • descending
    • ascending
Beispiel
sort=name/ascending
Standard: frequency/descending
filter
Definiert, wie Bins innerhalb einer Einschränkung des Typs String gefiltert werden, bevor sie an den Client zurückgegeben werden.
Syntax
filter=<bins>/<freq>/<prefix>[<levels>]
Die Attribute tun Folgendes:
  • <bins> - Gibt die maximale Anzahl zurückgegebener Bins an.
    Verwenden Sie dieses Attribut nach der Sortierung der Bins innerhalb der Einschränkung, um nachfolgende Bins abzuschneiden. Bei bins=10 werden gemäß des angegebenen Sortieralgorithmus beispielsweise nur die ersten 10 Bins zurückgegeben.
  • <freq> - Beschränkt die Anzahl zurückgegebener Bins.
    Verwenden Sie dieses Attribut, um Bins zu entfernen, die nur selten vorkommen. freq=2 bedeutet beispielsweise, dass nur die Bins mit 2 oder mehr Mitgliedern zurückgegeben werden.
  • <prefix> - Gibt an, dass nur Bins mit einem Namen zurückgegeben werden, der mit dieser Präfix beginnt.
    Wenn Sie das Platzhalterzeichen „*“ setzen, wird der Filter namensunabhängig auf alle Bins angewendet.
    Beispiel
    filter=30/2/*
  • <levels> - Gibt die Taxonomieebenen an.
    Verwenden Sie dieses Attribut, um eine hierarchische Einschränkungsausgabe basierend auf Taxonmieebenen zu filtern. Die Attribute müssen eine positive Ganzzahl nsein. Der Standardwert ist n=0. Bei n>0 werden nur Einschränkungseingaben zurückgegeben, die weniger als n Trennsymbole für den Taxonomiepfad („/") enthalten. Bei n=0 wird keine Ebenenfilterung durchgeführt. Das Ebenentrennzeichen ist ein Schrägstrich („/").
    Bedenken Sie immer die Leistungseinbußen, die mit einem großen Taxonomienavigator einhergehen. Die Filterung wird als Teil der Ergebnisverarbeitung durchgeführt.
Hinweis: Dieser Parameter wendet eine anwendungsspezifische Filterung auf Ergebnisseite an. Dies unterscheidet sich von dem „cutoff“-Parameter, der aus Leistungsgründen Einschränkungen in jeder Indexpartition anwendet.
cutoff
Schränkt die Daten ein, die für tiefe Zeichenfolgeneinschränkungen übertragen und verarbeitet werden müssen. Sie können die Einschränkungen so konfigurieren, dass nur die relevantesten Werte (Bins) zurückgegeben werden.
Hinweis: Die Filterung auf Basis des Parameters „cutoff“ wird innerhalb jeder Indexpartition durchgeführt. Damit unterscheidet sich dieser Parameter vom Parameter filter, der ausschließlich eine ergebnisseitige Filterung durchführt. Sie können die beiden Parameter miteinander kombinieren.
Syntax
cutoff=<frequency>/<minbins>/<maxbins>
Die Attribute tun Folgendes:
  • <maxbins> - Schränkt die Anzahl von Bins ein.
    Dieser Parameter schränkt die Anzahl eindeutiger Werte (Bins) ein, die für eine Einschränkung zurückgegeben werden. Dies ist die bevorzugte Methode, um die Suchleistung zu steigern, wenn Zeichenfolgeneinschränkungen mit einer großen Anzahl von Bins zurückgegeben werden. „0" bedeutet, dass der im Suchschema angegebene Standardwert verwendet wird.
  • <frequency> - Schränkt die Anzahl von Bins nach Häufigkeit ein.
    Wenn die Anzahl der Vorkommnisse eines Einschränkungswerts in einem Resultset kleiner oder gleich dem Häufigkeitswert ist, wird der Einschränkungswert nicht zurückgegeben. „0" bedeutet, dass der Standardwert gemäß des Suchschemas verwendet wird.
  • <minbins> - Gibt den maximalen Wert für den Häufigkeitsgrenzwert an.
    Wenn die Anzahl eindeutiger Einschränkungswerte für die Abfrage niedriger als dieser Wert ist, wird keine Häufigkeitsabtrennung durchgeführt, und alle Einschränkungswerte werden von dieser Suchpartition zurückgegeben. Wenn eine Abtrennung nach Häufigkeit verwendet wird, kann dieser Parameter verwendet werden, um eine minimale Anzahl von eindeutigen Einschränkungswerten anzugeben, die zurückgegeben werden, unabhängig von der Anzahl von Vorkommnissen. Der Standarwert dieses Attributs ist „0"; dadurch wird angegeben, dass die Häufigkeitsabtrennung unabhängig von der Anzahl eindeutiger Navigatorwerte durchgeführt wird. „0" bedeutet, dass der im Indexschema angegebene Standardwert verwendet wird.
Hinweis: Verwenden Sie die Parameter <frequency> und <minbins> mit Bedacht. Es wird empfohlen, dass Sie nur <maxbins> verwenden.

Beispiel: Hinzufügen von Einschränkungen

Im folgenden CSOM-Beispiel wird gezeigt, wie drei Einschränkungen programmgesteuert angefordert werden: FileType, Write und Companies. Write stellt das Datum der letzten Änderung für das Element dar und verwendet die erweiterte Syntax, um Datums-/Uhrzeitbins mit fester Größe zurückzugeben.

using (var context = new ClientContext("http://<serverName>/<siteCollectionPath>"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home",
        Refiners = "FileType,Write(discretize=manual/2013-01-01/2013-08-22/2013-09-
            15/2013-09-21/2013-09-22),companies"
    };

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    ResultTable relevantResultsTable = results.Value[0];
    ResultTable refinerResultsTable = results.Value[1];
    Console.WriteLine(refinerResultsTable.RowCount + " refinement options:");
    foreach (var refinementOption in refinerResultsTable.ResultRows)
    {
        Console.WriteLine("RefinerName: '{0}' RefinementName: '{1}'
            RefinementValue: '{2}' RefinementToken: '{3}' RefinementCount: '{4}'",
            refinementOption["RefinerName"],
            refinementOption["RefinementName"],
            refinementOption["RefinementValue"],
            refinementOption["RefinementToken"],
            refinementOption["RefinementCount"]
        );
    }
}

Verstehen der Einschränkungsdaten im Suchergebnis

Wenn Sie die Abfrageeinschränkung für eine verwaltete Eigenschaft in Ihrer Abfrage aktiviert haben, enthält das Abfrageergebnis Einschränkungsdaten, die in Einschränkungsbins unterteilt sind. Diese Daten befinden sich in der RefinementResults-Tabelle ( RefinementResults ) innerhalb der ResultTableCollection . Ein Einschränkungsbin stellt einen bestimmten Wert oder Wertebereich für die verwaltete Eigenschaft dar. Die RefinementResults-Tabelle enthält eine Zeile pro Einschränkungsbin und enthält die Spalten, wie in Tabelle 2 angegeben.

Tabelle 2: Für Einschränkungsbins zurückgegebene Daten

Parameter Beschreibung
RefinerName Der Name der Abfrageeinschränkung.
RefinementName Die Zeichenfolge, die das Einschränkungsbin darstellt. Diese Zeichenfolge wird in der Regel verwendet, wenn Einschränkungsoptionen für die Benutzer auf einer Suchergebnisseite präsentiert werden.
RefinementValue Eine implementierungsspezifische formatierte Zeichenfolge, die die Einschränkung darstellt. Diese Daten werden zum Debuggen zurückgegeben und sind normalerweise für den Client nicht erforderlich.
RefinementToken Eine Zeichenfolge, die das für RefinerName zu verwendende Einschränkungsbin darstellt, wenn Sie eine eingeschränkte Abfrage ausführen.
RefinementCount Die Anzahl der Ergebnisse für dieses Einschränkungsbin. Diese Daten stellen die Anzahl von Elementen (einschließlich Duplikaten) im Suchergebnis mit einem Wert für die angegebene verwaltete Eigenschaft dar, der in dieses Einschränkungsbin fällt.

Beispiel: Einschränkungsdaten

Tabelle 3 unten enthält zwei Zeilen mit Einschränkungsdaten. Die erste Zeile enthält Einschränkungsdaten für indizierte Elemente, wobei der Dateityp HTML ist. Die zweite Zeile enthält Einschränkungsdaten für indizierte Elemente, wobei der Zeitpunkt der letzten Bearbeitung zwischen 21.09.2013 und 22.09.2013 liegt.

Tabelle 3: Format und Inhalt der Einschränkungsdaten

RefinerName RefinementName RefinementValue RefinementToken RefinementCount
FileType HTML HTML "????68746d6c" 50553
Schreiben Von 2013-09-21T00:00:00Z bis 2013-09-22T00:00:00Z Von 2013-09-21T00:00:00Z bis 2013-09-22T00:00:00Z range(2013-09-21T00:00:00Z, 2013-09-22T00:00:00Z) 37

Erstellen einer Einschränkungsabfrage

Ein Suchergebnis stellt Einschränkungsoptionen in der Form von Zeichenfolgenwerten oder Wertebereichen dar. Jeder Zeichenfolgenwert oder numerische Wertebereich wird als Einschränkungsbin bezeichnet, und jeder Einschränkungsbin weist einen zugewiesenen RefinementToken-Wert auf. Eine Einschränkungsoption ist einer verwalteten Eigenschaft zugeordnet, die vom RefinerName-Wert bereitgestellt wird.

Sowohl der Wert RefinementToken als auch der Wert RefinerName ist verkettet, sodass eine refinement filter-Zeichenfolge erstellt wird. Diese Zeichenfolge stellt einen Filter dar, der verwendet werden kann, um Suchergebnisse so einzuschränken, dass nur Elemente enthalten sind, bei denen eine verwaltete Eigenschaft einen Wert innerhalb eines Einschränkungsbin aufweist. Kurz ausgedrückt:

refinement filter = <RefinerName>:<RefinementToken>

Sie können einen oder mehrere Einschränkungsfilter für eine eingeschränkte Abfrage angeben, indem Sie der RefinementFilters -Eigenschaft der KeywordQuery -Klasse Einschränkungsfilter hinzufügen. Mit mehreren Einschränkungsfiltern können Sie einen Drilldown über mehrere Stufen in Suchergebnisse bereitstellen und eine Einschränkung auf Eigenschaften mit mehreren Werten anwenden. Sie können beispielsweise die Abfrage auf Elemente mit zwei Autoren einschränken, von denen jeder von einem Einschränkungsbin dargestellt wird, aber Elemente ausschließen, die nur einen der Autoren enthalten.

Beispiel 1: Erstellen einer eingeschränkten Abfrage für Dateien des Typs HTML

Das folgende CSOM-Beispiel demonstriert, wie Sie programmgesteuert eine Einschränkung implementieren können, die die Suchergebnisse ausschließlich auf Dateien des Typs HTML eingrenzt. Wie bereits im Abschnitt Beispiel: Einschränkungsdaten erwähnt, ist in den zu dieser Einschränkungsoption gehörenden Einschränkungsdaten der Parameter RefinerName auf Filetype gesetzt und der Parameter RefinementToken auf "????68746d6c".

using (var context = new ClientContext("http://<serverName>/<siteCollectionPath>"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };

    query.RefinementFilters.Add("FileType:\\"????68746d6c\\"");
    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    ResultTable relevantResultsTable = results.Value[0];
    var resultCount = 1;
    foreach (var relevantResult in relevantResultsTable.ResultRows)
    {
        Console.WriteLine("Relevant result number {0} has file type {1}.",
            resultCount, relevantResult["FileType"]);
            resultCount++;
    }
}

Beispiel 2: Erstellen einer eingeschränkten Abfrage auf Basis von zuvor abgerufenen Einschränkungsdaten

Im folgenden CSOM-Beispiel wird veranschaulicht, wie eine Abfrage mit einer Einschränkungsspezifikation ausgeführt wird, um Einschränkungsdaten zu erstellen, die anschließend zum Durchführen einer Einschränkung verwendet werden. In diesem Beispiel wird der Prozess simuliert, bei dem ein Benutzer die erste Einschränkungsoption auswählt.

using (var context = new ClientContext("http://<serverName>/<siteCollectionPath>"))
{
    // Step 1: Run the query with refiner spec to provide refinement data in search result
    var query = new KeywordQuery(context)
    {
        QueryText = "home",
        Refiners = "FileType,Write(discretize=manual/2013-01-01/2013-08-22/2013-09-15/2013-09-21/2013-09-22),companies"
    };

    Console.WriteLine("Run query '{0}' with refiner spec '{1}'.", query.QueryText, query.Refiners);
    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);
    context.ExecuteQuery();

    // The query has been run and we can now look at the refinement data, to view the
    // refinement options
    ResultTable relevantResultsTable = results.Value[0];
    ResultTable refinerResultsTable = results.Value[1];
    Console.WriteLine("Got back {0} refinement options in the result:",
        refinerResultsTable.RowCount);

    foreach (var refinementOption in refinerResultsTable.ResultRows)
    {
        Console.WriteLine("RefinerName: '{0}' RefinementName: '{1}'
            RefinementValue: '{2}' RefinementToken: '{3}' RefinementCount: '{4}'",
            refinementOption["RefinerName"],
            refinementOption["RefinementName"],
            refinementOption["RefinementValue"],
            refinementOption["RefinementToken"],
            refinementOption["RefinementCount"]
        );
    }

    // Step 2: Run the refined query with refinement filter to drill down into
    // the search results. This example uses the first refinement option in the refinement
    // data, if available. This simulates an end user selecting this refinement option.
    var refinementOptionArray = refinerResultsTable.ResultRows.ToArray();

    if (refinementOptionArray.Length > 0)
    {
        var firstRefinementOption = refinementOptionArray[6];
        // Construct the refinement filter by concatenation
        var refinementFilter = firstRefinementOption["RefinerName"] + ":" +
            firstRefinementOption["RefinementToken"];
        var refinedQuery = new KeywordQuery(context)
        {
            QueryText = query.QueryText
        };
        refinedQuery.RefinementFilters.Add(refinementFilter);
        refinedQuery.SelectProperties.Add("FileType");
        refinedQuery.SelectProperties.Add("Write");
        refinedQuery.SelectProperties.Add("Companies");
        Console.WriteLine("Run query '{0}' with refinement filter '{1}'",
            refinedQuery.QueryText, refinementFilter);
        var refinedResults = executor.ExecuteQuery(refinedQuery);
        context.ExecuteQuery();
        ResultTable refinedRelevantResultsTable = refinedResults.Value[0];
        var resultCount = 1;
        foreach (var relevantResult in refinedRelevantResultsTable.ResultRows)
        {
            Console.WriteLine("Relevant result number {0} has FileType='{1}',
                Write='{2}', Companies='{3}'",
                resultCount,
                relevantResult["FileType"],
                relevantResult["Write"],
                relevantResult["Companies"]
            );
            resultCount++;
        }
    }
}

Siehe auch

Sonstige Ressourcen