Freigeben über


RANK BY-Klausel

Die Ergebnisse aus einer Abfrage enthalten sowohl die zeilen, die von der Abfrage zurückgegeben werden, als auch einen Rangwert für jede Zeile, wenn die Rangspalte in der SELECT-Klausel enthalten ist. Die Rangwerte werden von der Suchmaschine berechnet und als ganze Zahlen im Bereich 0 bis 1000 zurückgegeben. Um die Bewertungsergebnisse aussagekräftiger zu machen, kann die Abfrage steuern, wie rohe Rangwerte in der RANK BY-Klausel berechnet werden.

Dieses Thema ist wie folgt organisiert:

RANK BY-Klausel

Die Syntax für die RANK BY-Klausel lautet wie folgt:

WHERE ( <search_condition> ) 
RANK BY [ ( ] <rank_specification> [ ) ]

Die RANK BY-Klausel wird auf die search_condition unmittelbar davor angewendet, wobei eine niedrigere oder höhere Rangfolge für Zeilen angegeben wird, die von dieser Suchbedingung zurückgegeben werden, als Zeilen, die von einer anderen Suchbedingung zurückgegeben werden. Die Klammern, die die search_condition umgeben, sind erforderlich. Die Klammern, die die Rangspezifikation umgeben, sind optional.

Mehrere RANK BY-Klauseln können auf eine einzelne Bedingung angewendet werden. Sie können nacheinander zusätzliche RANK BY-Klauseln mithilfe von Klammern einschließen.

Anmerkung

Volltext-Prädikate geben Rangwerte im Bereich 0 bis 1000 zurück. Rangwerte für alle Dokumente, die mit einem Nicht-Volltext-Prädikat übereinstimmen, sind 1000. Änderungen an den Rangwerten sollten diese Informationen berücksichtigen.

 

Der rank_specification Teil der RANKBY-Klausel identifiziert eine oder mehrere Funktionen, die auf die Rangwerte angewendet werden sollen. Die Funktion WEIGHT wendet einen Multiplikator auf den unformatierten Rangwert für eine zurückgegebene Zeile an. Je kleiner der Multiplikator, desto niedriger der resultierende Rangwert. Die COERCION-Funktion kann verwendet werden, um einen bestimmten Rangwert für eine zurückgegebene Zeile zu multiplizieren, hinzuzufügen oder festzulegen. Jede Rangangabe kann entweder null oder eine GEWICHTUNGsfunktion und null oder mehr COERCION-Funktionen enthalten. Wenn sowohl WEIGHT- als auch COERCION-Funktionen in einer RANK BY-Klausel enthalten sind, muss die WEIGHT-Funktion zuerst sein.

WEIGHT-Funktion

Die Syntax der Funktion WEIGHT lautet:

WEIGHT ( <weight_multipler> ) 

Der Multiplikator muss eine Dezimalzahl zwischen 0,001 und 1,000 sein. Der vom Suchbedingungs-Prädikat zurückgegebene rohe Rangwert wird mit dem Gewichtsmultiplikator multipliziert, um einen neuen Rangwert festzulegen.

Im folgenden Beispiel gibt die FUNKTION GEWICHT Dokumente mit dem Wort "Theresa" im Feld "System.Document.LastAuthor" die Hälfte des Rangwerts von Dokumenten mit "Theresa" im Feld "System.Author" an:

WHERE CONTAINS ( System.Author,'"Theresa"' ) 
         RANK BY WEIGHT ( 1.000 )
      OR
      CONTAINS ( System.Document.LastAuthor,'"Theresa"' ) 
         RANK BY WEIGHT ( 0.500 ) 

 

Anmerkung

Die Features "CONTAINS" und "FREETEXT-Prädikatspaltengewichtung" unterstützen ein Kurzformat unter Verwendung eines Doppelpunkts zwischen dem Suchbegriff und dem Multiplizierer ("software":0.25). Die RANK BY-Klausel unterstützt das gekürzte Formular nicht.

 

Es gibt eine Einschränkung bei Verwendung von RANK BY WEIGHT: Es funktioniert nicht mit CONTAINS-Klauseln, die boolesche Bedingungen verwenden; Das folgende Beispiel ist beispielsweise nicht zulässig:

CONTAINS ( System.Author,'"Theresa" OR "Teresa"' ) RANK BY WEIGHT ( 0.400 )

KOERCION-Funktion

Die Rangkoersionsfunktion kann verwendet werden, um den zurückgegebenen Rangwert durch Addition oder Multiplikation oder durch Zuweisen eines bestimmten Werts zu ändern.

Die Syntax der Funktion COERCION lautet:

COERCION ( <coercion_operation> , <coercion_value> )

Der Koersionswert ist ein ganzzahliger Wert.

In der folgenden Tabelle werden die verfügbaren Einstellungen für den Koersionsvorgang beschrieben.

Koersionsoperation Beschreibung Wertbereich
ABSOLUT Der zurückgegebene Rangwert ist der im Koersionswert angegebene Wert. 0 bis 1000
HINZUFÜGEN Der zurückgegebene Rangwert ist die Summe des rohen Rangwerts und des angegebenen Koersionswerts. 0 bis 1000
MULTIPLIZIEREN Der zurückgegebene Rangwert ist das Produkt des rohen Rangwerts und des angegebenen Koersionswerts. 0 bis 1000
MINMAX Der zurückgegebene Rangwert ist die lineare Zuordnung des 0-1000-Bewertungsergebnisses des übereinstimmenden Elements aus CONTAINS oder CONTAINSSEMANTIC zwischen den angegebenen Mindest- und maximaler Koersionswerten. 0 bis 1000

Wichtig

Die Suche kann Rangwerte nur im Bereich von 0 bis 1000 zurückgeben.

Im folgenden Beispiel wird die COERCION-Funktion verwendet, um alle Dokumente mit "Computer" im Titel auf einen Rang von 1000 festzulegen, während die Rangfolge von Dokumenten, die sowohl "Computer" als auch "Software" im Titel enthalten, um ein Viertel reduziert wird.

WHERE CONTAINS ( System.Title, 'computer' )
        RANK BY COERCION ( ABSOLUTE , 1000 )
        OR 
       CONTAINS ( System.Title, '"computer" AND "software"' )
        RANK BY COERCION ( MULTIPLY, 0.750 ) 

Im folgenden Beispiel wird die COERCION-Funktion verwendet, um den rohen Rang von Dokumenten mit dem Begriff "Computer" einem Bereich zwischen 500 und 800 basierend auf ihren semantischen Übereinstimmungen zuzuordnen.

WHERE CONTAINSSEMANTIC('text', *, 'computer', 1033)
OR CONTAINSSEMANTIC('image', *, 'computer', 1033)
RANK BY COERCION(MINMAX, 500, 800)
ORDER BY System.Search.Rank DESC

 

Merge(<merge_operation>)

Wird mit der RANK BY-Klausel verwendet, um die Rangfolgen aus allen Ergebnissen zu aggregieren, um eine endgültige Rangliste der Seriendruckergebnisse zu generieren.

Die Syntax für die MERGE-Funktion lautet wie folgt:

RANK BY MERGE ( <merge_operation>) 

Merge-Vorgänge

In der folgenden Tabelle werden die unterstützten Vorgänge für den parameter merge_operation beschrieben.

Zusammenführungsvorgang Beschreibung
KONVEXCOMBINATION Dieser Zusammenführungsalgorithmus sollte ausschließlich verwendet werden, wenn die Abfrage die folgenden Klauseln enthält: CONTAINS (lexikalische Suche), CONTAINSSEMANTIC('Text',...) und CONTAINSSEMANTIC('Image'...) (Semantische Suche über Text und Bilder hinweg). Es kombiniert Bewertungen aus diesen drei Klauseln mithilfe eines gewichteten Summenansatzes, wodurch die lexikalischen Bewertungen mit höherer Priorität bewertet werden, indem sie im Vergleich zu semantischen Bewertungen größere Gewichtungen zuweisen. Der letzte Rang liegt zwischen 0 und 1000.
MIN Dieser Zusammenführungsalgorithmus ist das Standardverhalten bei einem AND-Cursor. Es wählt den minimalen Rang aus allen Ergebnissen aus.
MAX Dieser Zusammenführungsalgorithmus ist das Standardverhalten bei einem OR-Cursor. Es wählt die maximale Rangfolge aus allen Ergebnissen aus.

Anmerkung

Die Verwendung von RANG BY MERGE(MIN) mit einem OR-Cursor oder RANG BY MERGE(MAX) mit einem AND-Cursor führt nicht zu den erwarteten Ergebnissen. Es wird empfohlen, die MERGE-Funktion mit der RANK BY-Klausel explizit nur in Verbindung mit dem CONVEXCOMBINATION-Operator zu verwenden, wenn lexikalische und semantische Suchergebnisse in einem einzigen Resultset zusammengeführt werden.

Example

Das folgende Beispiel veranschaulicht die Verwendung der MERGE-Funktion zum Suchen nach Elementen lexikalisch und semantisch mit dem Wort "Computer" in den Feldern "Bild" oder "Text". Die Suchergebnisse werden dann mithilfe des RANK BY MERGE-Operators bewertet, der Bewertungen aus allen Ergebnissen aggregiert, um eine endgültige Rangliste zu generieren.

WHERE (CONTAINS(*,'computer', 1033)  
OR CONTAINSSEMANTIC('Image', *, 'computer', 1033)  
OR CONTAINSSEMANTIC('Text', System.ItemNameDisplay, 'computer', 1033)  
OR CONTAINSSEMANTIC('Text', *, 'computer', 1033))  
RANK BY MERGE(CONVEXCOMBINATION) 

Weitere Informationen zum CONTAINSSEMANTIC-Prädikat finden Sie unter CONTAINSSEMANTIC-Prädikat.