Sortieren von Suchergebnissen in SharePoint
Ordnen Sie Suchergebnisse programmgesteuert nach Rang, verwaltetem Eigenschaftswert, einem Formelausdruck oder in zufälliger Reihenfolge mithilfe des Abfrage-Objektmodells in SharePoint.
Sie können die Suchergebnisse für SharePoint auf vier Arten sortieren:
Sortieren von Suchergebnissen nach Rang: Ermöglicht die Sortierung des Suchergebnisses basierend auf dem Relevanzrang.
Sortieren von Suchergebnissen nach dem Wert einer verwalteten Eigenschaft: Ermöglicht die Sortierung des Suchergebnisses basierend auf dem Wert mindestens einer verwalteten Eigenschaft.
Sortieren von Suchergebnissen nach einem Formelausdruck: Ermöglicht die Sortierung des Suchergebnisses nach einer in der Abfrageanforderung angegebenen Formel.
Sortieren von Suchergebnissen in zufälliger Reihenfolge: Ermöglicht die Sortierung des Abfrageergebnisses in zufälliger Reihenfolge oder das Hinzufügen einer zufälligen Komponente zur Sortierreihenfolge.
Dieser Artikel befasst sich mit der programmgesteuerten Sortierung von Suchergebnissen. Sehen Sie sich die folgenden Artikel an, um zu erfahren, wie Sie Suchergebnisse mithilfe von SharePoint-Abfrageregeln sortieren können:
Ändern bewerteter Suchergebnisse in „Abfrageregeln verwalten“
„Ändern bewerteter Suchergebnisse" in „Erstellen von Abfrageregeln für das Web Content Management“
Angeben der Sortierung in einer Abfrageanforderung
Wenn Sie das Query-Objektmodell verwenden, können Sie die Sortierkriterien auswählen, indem Sie eine Sortierspezifikation über die SortList-Eigenschaft der KeywordQuery-Klasse bereitstellen. Die SortList-Eigenschaft ist vom Typ SortCollection, der eine Sammlung von Sort-Objekten repräsentiert.
Ein Sort-Objekt definiert eine Möglichkeit zum Sortieren von Suchergebnissen. Sie besteht aus einem Wert, für den Sie Suchergebnisse sortieren möchten (Eigenschaft) und einer Richtung, in der Sie die Ergebnisse sortieren möchten (Richtung). Die Richtung ist vom Typ SortDirection() und kann aufsteigend oder absteigend sein.
Wenn In SortList mehrere Werte vorhanden sind, wird die Sortierung basierend auf der Reihenfolge durchgeführt, in der die Werte angezeigt werden. Dies bedeutet, dass jedes Sort-Objekt eine Sortierreihenfolgeebene darstellt. Alle nachfolgenden Ebenen ändern die Reihenfolge der Ergebnisse nicht, die von vorherigen unterschieden wurden, aber sie wirken sich möglicherweise auf die interne Sortierung von Ergebnissen aus, die über dieselben Sortierwerte für die vorherigen Ebenen verfügen.
Neben dem Abfrage-Objektmodell bietet SharePoint zudem einen Search-REST-Dienst, den Sie verwenden können, um den Suchindex mit Ihrer Client- oder mobilen Anwendung abzufragen. Der Search-REST-Dienst unterstützt POST- und GET-HTTP-Anforderungen. Weitere Informationen zum Erstellen von URIs für diese Anforderungen finden Sie unter Abfragen mit dem Search-REST-Dienst.
Sortieren der Suchergebnisse nach Rang
Standardmäßig werden die Suchergebnisse nach Relevanzrang sortiert. Dies bedeutet, dass SharePoint die relevantesten Suchergebnisse ganz oben im Suchergebnissatz platziert. Bei der Sortierung nach Rang werden die Ergebnisse stets in absteigender Reihenfolge sortiert. Sie können die Sortierreihenfolge jedoch mithilfe von SortDirection() in aufsteigend ändern.
Außerdem können Sie die Rangberechnung in der Abfragezeichenfolge auf zwei Arten beeinflussen:
Mit dem XRANK-Operator in Syntaxreferenz für die Keyword Query Language (KQL) und Syntaxreferenz für FQL (FAST Query Language). Mit XRANK können Sie für den Fall, dass eine bestimmte Abfragebedingung erfüllt wird, eine bedingte Rangverstärkung anwenden.
Durch Auswählen einer Relevanzgewichtung für eine dynamische Rangfolge. Bei Verwendung von FQL können Sie eine einzelne Relevanzgewichtung für jeden STRING-Operator angeben.
Sortieren von Suchergebnissen nach dem Wert einer verwalteten Eigenschaft
Sie können die Sortierung der Suchergebnisse basierend auf dem Wert einer oder mehrerer verwalteter Eigenschaften angeben. Dies bedeutet, dass SharePoint die Sortierung basierend auf allen Ergebnissen durchführt, die der Abfrage entsprechen.
Sie können auf der Grundlage von Text- und numerischen Eigenschaften sortieren. Bei Texteigenschaften basiert die Sortierung auf der Zeichenfolgensortierung für Standardtext. Im Gegensatz dazu basiert die Sortierung bei numerischen Eigenschaften (einschließlich verwalteter Eigenschaften des Typs DateTime), auf dem numerischen Wert.
Beispiel
Das folgende Beispiel zeigt die Sortierung der Suchergebnisse mithilfe der verwalteten Eigenschaft Size.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("Size", SortDirection.Descending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"] + " Size:" + result["Size"]);
}
}
Alternativ können Sie mit folgendem Aufruf die Such-REST-API zum Sortieren der Suchergebnisse nach der Size-Eigenschaft verwenden.
http://localhost/_api/search/query?querytext='home'&sortlist='size:descending'
Sortieren von Suchergebnissen nach einem Formelausdruck
Sie können die Sortierung der Suchergebnisse basierend auf einer Sortierspezifikation angeben, die den Sortierwert nach einer mathematischen Formel berechnet.
Das Feature der Sortierung nach einer Formel ist eine Erweiterung der einstufigen und mehrstufigen Sortierfunktionalität für Suchergebnisse. Das Feature ermöglicht die Angabe einer Formel anstelle einer verwalteten Eigenschaft als Sortierkriterium.
Mit dem Feature der Sortierung nach einer Formel können Sie mathematische Operationen auf den Wert von verwalteten Eigenschaften für jedes Element im Abfrageergebnis anwenden.
Im Folgenden finden Sie Beispiele, die mithilfe einer Formel für die Suchergebnissortierung implementiert werden können:
K-Nächster-Nachbar-Algorithmus zur Klassifikation von Dokumenten
Euklidischer Abstand oder Manhattan-Abstand zur Berechnung geographischer Entfernungen
Bevorzugter Wert, z. B. zum Sortieren von Dokumenten basierend darauf, wie weit der Wert einer bestimmten verwalteten Eigenschaft von einem bevorzugten Wert entfernt ist.
Das Feature der Sortierung nach einer Formel umfasst keine Kontrolle über statistische dynamische Rangfolgenparameter, wie z. B. Häufigkeit von Begriffen und Nähe.
Die Formel wird von links nach rechts ausgewertet, wobei die standardmäßige Rangfolge der mathematischen Operatoren angewendet wird. Das bedeutet, Funktionen und eingeklammerte Gruppen werden zuerst ausgewertet, danach Multiplikationen und Divisionen und zuletzt Additionen und Subtraktionen.
Wichtig
Das endgültige Ergebnis einer Formel muss im Wertebereich einer 32-Bit-Ganzzahl mit Vorzeichen liegen. Andernfalls ist die Sortierung möglicherweise falsch.
Angeben der Sortierformel in einer Abfrage
Sie können in der Sortierspezifikation der Abfrageanforderung eine Sortierformel anstelle einer verwalteten Eigenschaft angeben.
Die Sortierspezifikation hat das folgende Format: [formula:<sort-formula>]
Im Format <ist sort-formula> der Ausdruck der Sortierformel.
Hinweis
Die eckigen Klammern sind Teil der Syntax der Sortierspezifikation.
Die Standardmäßige Sortierrichtung ist absteigend. Sie können auch eine Formel verwenden, die nach aufsteigenden Werten sortiert wird, z. B. wenn die Formel eine geografische Entfernung angibt.
Das folgende Codebeispiel zeigt, wie Sie die Sortierung nach Formel mit aufsteigender Sortierreihenfolge mithilfe des Abfrage-Objektmodells angeben.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[formula:abs(2000-size)]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}
Alternativ können Sie mit folgendem Aufruf die Such-REST-API zum Sortieren der Suchergebnisse nach der Size-Eigenschaft verwenden.
http://localhost/_api/search/query?querytext='home'&sortlist='[formula:abs(2000-size)]:ascending'
Verwenden von verwalteten Eigenschaften in der Sortierformel
Sie können eine Sortierformel auf den Wert der verwalteten Eigenschaften des Typs Integer, Decimal und Datetime() anwenden. Sie müssen für die angegebene verwaltete Eigenschaft im Suchschema die Sortierung aktivieren.
Bei verwalteten Eigenschaften vom Typ Decimal wird der Wert mit 10^(Dezimalstellen) multipliziert, bevor er in der Formelauswertung verwendet wird.
Für verwaltete Eigenschaften vom Typ Datetime()](/previous-versions/office/developer/sharepoint-2010/ms500214(v%3Doffice.14)) wird der Wert in die Anzahl von 100 Nanosekunden seit dem 1. Januar 29000 v. Chr. konvertiert, bevor er in der Formelauswertung verwendet wird. Das Jahr hat 366 Tage.
Sortierformelausdrücke
In Tabelle 1 sind die Funktionen aufgelistet, die Sie im Sortierformelausdruck verwenden können. Der Ausdruck darf keine Leerzeichen enthalten.
Tabelle 1. Funktionen für Sortierformelausdrücke
Funktion | Beschreibung |
---|---|
+ |
Gibt Addition an. |
- |
Gibt Subtraktion an. |
* |
Gibt Multiplikation an. |
/ |
Gibt die Division an. Hinweis: Standardmäßig führt eine Division durch Null zu einer Ausnahme, und die Abfrage gibt einen Fehler zurück. Mithilfe des errtolast-Operators können Sie den Abfragefehler vermeiden und stattdessen die fehlerhaften Elemente am Ende des Resultsets platzieren. |
rank |
Ein spezielles Schlüsselwort, das den dynamischen Rang eines Elements darstellt. Beispiel: abs(rank-100) verwendet den Abstand zum Rangwert 100 als Sortierkriterium. |
[0-9.]+ |
Gibt an, dass Zahlen als ganze Zahl oder doppelte Werte angegeben werden können. Beispiele: 503; 3,14; 5,4352262 |
[a-z0-9]+] |
Gibt an, dass eine beliebige Zeichenfolge, die nicht als Funktionsname erkannt wird, als Name einer verwalteten Eigenschaft behandelt wird. Sie müssen die Sortierung für die angegebene verwaltete Eigenschaft im Suchschema aktivieren. Beispiel: Sie können eine verwaltete Eigenschaft namens height mit aktivierter Sortierung definieren. Dies ermöglicht Ihnen, "height" als Ausdruck in der Formel zu verwenden. Die Formel verwendet dann den Wert der verwalteten Eigenschaft height. |
( and ) |
Verwendet zur Gruppierung von Berechnungen, um den richtigen Vorrang sicherzustellen. Beispiel: 4*(3+2) |
sqrt(n) |
Die Quadratwurzel von n. |
exp(n) |
Die Exponentialfunktion, die pow(2.71828182846,n) entspricht |
log(n) |
Der natürliche Logarithmus von n. |
abs(n) |
Der absolute Wert von n. |
ceil(n) |
Die Obergrenze von n. Das heißt, wenn n keine ganze Zahl ist, auf die nächste ganze Zahl aufrunden. Wenn n eine ganze Zahl ist, verwenden Sie n. |
floor(n) |
Der Boden von n. Das heißt, wenn n keine ganze Zahl ist, auf die nächste ganze Zahl runden. Wenn n eine ganze Zahl ist, verwenden Sie n. |
round(n) |
Die Rundung von n auf die nächste gerade ganze Zahl. Auch bekannt als „Bankers rounding“ oder „Round half to even“. |
sin(n) |
Der Sinus von n Bogenmaß. |
cos(n) |
Der Kosinus von n Bogenmaß. |
tan(n) |
Der Tangens von n Bogenmaß. |
asin(n) |
Der Bogensinus im Bogenmaß von n. |
acos(n) |
Der Arkkosinus im Bogenmaß von n. |
atan(n) |
Der Arkustangens im Bogenmaß von n. |
pow(x,y) |
Der Wert von x , der auf die Potenz von y erhöht wird. Hinweis: Der Wert von y muss eine reelle Zahl sein. |
atan2(y,x) |
Ein Arcustangens (mit zwei Argumenten) des Winkels im Bogenmaß zwischen der positiven X-Achse und der angegebenen kartesischen Koordinate (x,y). |
bucket(b,n1,n2,…) |
Ein Operator, der verwendet werden kann, um diskrete Werte für angegebene Werteverteilungsbereiche für einen Ausdruck anzugeben. Der Ausdruck b kann eine verwaltete Eigenschaft oder ein beliebiger anderer Formelausdruck sein. Die Argumente n1, n2, ... stellen numerische Schwellenwerte dar. Sie können eine beliebige Anzahl von Grenzwerten für den Bucket angeben. Hinweis: Sie müssen die Argumente n1, n2, n3, ... in der folgenden Reihenfolge anordnen: n1 < n2 < n3 < ... mit n1 >= 0 . Ein gegebener Wert für den Eingabeausdruck b wird auf den nächsten gegebenen numerischen Grenzwert abgerundet. Wenn der Wert niedriger als der niedrigste angegebene Schwellenwert ist, ist das Ergebnis Null. |
errtolast(x) |
Ein Operator, der verwendet werden kann, um zu steuern, wie Formelausnahmen behandelt werden. x kann ein beliebiger Formelausdruck sein. Wenn die Berechnung dieses Formelausdrucks zu einer mathematischen Ausnahme für ein Element im Resultset führt, z. B. division durch Null, werden diese Elemente unabhängig von der angegebenen Sortierrichtung am Ende der Sortierliste angezeigt. |
Leistungsmerkmale für das Sortieren nach einer Formel
Das Verwenden einer Sortierformel impliziert, dass die Formelberechnungen auf alle gefundenen Elemente im Resultset angewendet werden. Somit hängen die Auswirkungen der Abfrageleistung von der Anzahl der Elemente ab, die der Abfrage entsprechen.
Lange Formeln mit vielen Operatoren erfordern mehr Verarbeitungszeit als kurze Formeln.
Verwenden der Sortierung nach einer Formel für geographische Entfernungen
Sie können mit einer Sortierformel eine Bewertung entsprechend der Entfernung anwenden. Dazu müssen Sie verwaltete Eigenschaften angeben, die die geografische Breite und Länge der einzelnen Elemente darstellen.
Beispielsweise können Sie eine der folgenden Standardformeln verwenden:
Manhattan-Abstand
Euklidischer Abstand (siehe Beispiel 2)
Haversinus-Formel
Wichtig
Verwenden Sie verwaltete Eigenschaften vom Typ Decimal oder Float, um die Werte für die geografische Breite und die geografische Länge anzugeben.
Beispiele
Die folgenden Beispiele zeigen, wie Sie die Sortierformel mit dem Abfrage-Objektmodells sortieren.
Beispiel 1. Platzieren der Elemente, deren verwaltete Eigenschaft height am nächsten bei 20 liegt, am Anfang der Liste.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[formula:abs(20-height)]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}
Alternativ könnten Sie die Such-REST-API verwenden, um die Elemente, deren verwaltete Eigenschaft height am nächsten bei 20 liegt, am Anfang der Ergebnisliste zu platzieren. Dazu verwenden Sie den folgenden Aufruf.
http://localhost/_api/search/query?querytext='home'&sortlist='[formula:abs(20-height)]:ascending
Beispiel 2. Sortieren Sie nach der tatsächlichen 3D-euklidischen Entfernung von einer bestimmten Position (z. B. der Position des Benutzers) basierend auf Positionsinformationen, die in den verwalteten Eigenschaften Breitengrad, Längengrad und Höhe bereitgestellt werden. Die folgende Formel gibt den euklidischen 3D-Abstand an, wenn die Basisposition 50/100/200 (Breitengrad/Längengrad/Höhe) ist.
sqrt(pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2))
Wenn Sie eine entfernungsbasierte Sortierung anwenden möchten (indem Sie die Entfernung nicht mit anderen Parametern in einer Formel kombinieren), können Sie die sqrt()
Komponente entfernen, da sie die Sortierreihenfolge nicht ändert, aber die Abfrageleistung verbessert.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[formula:pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2)]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}
Beispiel 3. Runden Sie die Größenwerte in Buckets ab, wobei Sie die Werte auf einen der folgenden Werte abrunden: 0, 5, 15, 50, 100; Sortieren Sie zuerst mit den größten Werten.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[formula:bucket(size,5,15,50,100)]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}
Sortieren von Suchergebnissen in zufälliger Reihenfolge
Sie können Abfrageergebnisse zufällig sortieren oder der Ergebnissortierung eine zufällige Komponente hinzufügen.
Die Spezifikation für die zufällige Sortierung hat das folgende Format: [random:seed=<seed>:hashfield=<managed property>]
Hinweis
Die eckigen Klammern sind Teil der Syntax der Sortierspezifikation.
Tabelle 2 erläutert die Parameter für die Spezifikation der zufälligen Sortierung.
Tabelle 2. Parameter für die Spezifikation für die Sortierung nach dem Zufallsprinzip
Parameter | Beschreibung | Erforderlich |
---|---|---|
Seed |
Der Startwert für die Generierung der Zufallswerte. Der Startwert wird für eine Funktion eingegeben, mit der eine Zufallszahl generiert wird. Diese Zufallszahl wird bei der endgültigen Sortierung verwendet. Wenn Sie nur die Seedoption verwenden, erhalten Sie ein zufällig sortiertes Abfrageresultset. Die Sortierreihenfolge für dieselbe Abfrage (bei Verwendung desselben Startwerts) wird möglicherweise nach einer Indexaktualisierung geändert. |
Ja |
Hashfield |
Eine verwaltete Eigenschaft, die als Hashwert für die zufällige Generierung verwendet wird. Sie können diesen Parameter verwenden, um sicherzustellen, dass die Sortierreihenfolge für die gleiche Abfrage (mit demselben Startwert) nach einer Indexaktualisierung unverändert bleibt. Die verwaltete Eigenschaft muss vom Typ Integer und Sortable() sein. Sie können diese verwaltete Eigenschaft mit zufälligen oder eindeutigen Werten (z. B. einer von einer Elementverarbeitungsphase aufgefüllten Sequenznummer) belegen. |
Nein |
Wenn Sie für gleiche Abfragen denselben Startwert angeben, werden die Elemente in der gleichen Reihenfolge angezeigt. Dies ermöglicht Ihnen, die zufällige Reihenfolge beizubehalten, wenn Sie Suchergebnisse seitenweise anzeigen. Verwenden Sie den hashfield-Parameter, um dieselbe zufällige Reihenfolge beizubehalten, wenn versehentlich eine Indexaktualisierung zwischen den Abfragen erfolgt.
Beispiele
Die folgenden Beispiele zeigen, wie Sie die zufällige Sortierung mit dem Abfrage-Objektmodell angeben.
Beispiel 1. Das gesamte Resultset wird in zufälliger Reihenfolge sortiert.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[random:seed=5432]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}
Alternativ können Sie mit folgendem Aufruf die Such-REST-API zum zufälligen Sortieren des gesamten Resultsets verwenden.
http://localhost/_api/search/query?querytext='home'&sortlist='[random:seed=5432]:ascending
Beispiel 2. Das gesamte Resultset wird in zufälliger Reihenfolge sortiert. Behalten Sie dieselbe zufällige Sequenz für dieselbe Abfrage mit demselben Ausgangswert bei, auch wenn ein Indexwechsel auftritt. Eine benutzerdefinierte verwaltete Eigenschaft namens hashvalue muss im Suchschema verfügbar sein und mit zufälligen oder sequenziellen numerischen Werten für alle indizierten Elemente aufgefüllt werden.
using (var context = new ClientContext("http://localhost"))
{
var query = new KeywordQuery(context)
{
QueryText = "home"
};
query.SortList.Add("[random:seed=6543:hashfield=hashvalue]", SortDirection.Ascending);
var executor = new SearchExecutor(context);
var results = executor.ExecuteQuery(query);
context.ExecuteQuery();
foreach (var result in results.Value[0].ResultRows)
{
Console.WriteLine(result["Title"]);
}
}