Einschränken von Suchergebnissen mit RANKLimit Search Results with RANK

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Die Funktionen CONTAINSTABLE und FREETEXTTABLE geben eine Spalte mit dem Namen RANK zurück, die Ordinalwerte zwischen 0 und 1000 (Rangwerte) enthält.The CONTAINSTABLE and FREETEXTTABLE functions return a column named RANK that contains ordinal values from 0 through 1000 (rank values). Diese Werte werden verwendet, um die Rangfolge der zurückgegebenen Zeilen gemäß ihrer Übereinstimmung mit den Auswahlkriterien festzulegen.These values are used to rank the rows returned according to how well they match the selection criteria. Die Rangwerte geben lediglich eine relative Relevanzreihenfolge der Zeilen im Resultset an, wobei ein niedrigerer Wert eine niedrigere Relevanz anzeigt.The rank values indicate only a relative order of relevance of the rows in the result set, with a lower value indicating lower relevance. Die tatsächlichen Werte sind nicht von Bedeutung und unterscheiden sich i. d. R. bei jeder Ausführung der Abfrage.The actual values are unimportant and typically differ each time the query is run.

Hinweis

Die CONTAINS- und FREETEXT-Prädikate geben keine Rangwerte zurück.The CONTAINS and FREETEXT predicates do not return any rank values.

Die Anzahl der Elemente, die eine Suchbedingung erfüllen, ist oft sehr groß.The number of items matching a search condition is often very large. Damit CONTAINSTABLE- oder FREETEXTTABLE-Abfragen nicht zu viele Übereinstimmungen zurückgeben, können Sie den optionalen top_n_by_rank -Parameter verwenden, mit dem nur eine Teilmenge der Zeilen zurückgegeben wird.To prevent CONTAINSTABLE or FREETEXTTABLE queries from returning too many matches, use the optional top_n_by_rank parameter, which returns only a subset of rows. top_n_by_rank ist ein Integer-Wert ( n) mit dem festgelegt wird, dass nur die n höchsten Übereinstimmungen in absteigender Reihenfolge zurückgegeben werden.top_n_by_rank is an integer value, n, that specifies that only the n highest ranked matches are to be returned, in descending order. Wenn top_n_by_rank mit anderen Parametern kombiniert wird, werden von der Abfrage möglicherweise weniger Zeilen zurückgegeben als die Anzahl von Zeilen, die mit allen Prädikaten übereinstimmen.If top_n_by_rank is combined with other parameters, the query could return fewer rows than the number of rows that actually match all the predicates.

SQL ServerSQL Server ordnet die Übereinstimmungen nach Rang und gibt nur die angegebene Anzahl Zeilen zurück.orders the matches by rank and returns only up to the specified number of rows. Diese Einschränkung kann zu einer deutlichen Leistungssteigerung führen.This choice can result in a dramatic increase in performance. So wird z. B. eine Abfrage, die normalerweise 100.000 Zeilen aus einer Tabelle mit 1 Million Zeilen zurückgeben würde, bedeutend schneller verarbeitet, wenn nur die obersten 100 Zeilen angefordert werden.For example, a query that would normally return 100,000 rows from a table of one million rows are processed more quickly if only the top 100 rows are requested.

Beispiele zur Verwendung von RANK zum Einschränken der SuchergebnisseExamples of Using RANK to Limit Search Results

Beispiel A: Ausschließliches Suchen nach den drei häufigsten ÜbereinstimmungenExample A: Searching for only the top three matches

Im folgenden Beispiel werden mit CONTAINSTABLE nur die obersten drei Übereinstimmungen zurückgegeben.The following example uses CONTAINSTABLE to return only the top three matches.

USE AdventureWorks2012  
GO  
  
SELECT K.RANK, AddressLine1, City  
FROM Person.Address AS A  
  INNER JOIN  
  CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("des*",  
    Rue WEIGHT(0.5),  
    Bouchers WEIGHT(0.9))',  
    3) AS K  
  ON A.AddressID = K.[KEY]  
GO  

Im Folgenden finden Sie das Resultset.Here is the result set.

RANK        Address                          City  
----------- -------------------------------- ------------------------------  
172         9005, rue des Bouchers           Paris  
172         5, rue des Bouchers              Orleans  
172         5, rue des Bouchers              Metz  
  
(3 row(s) affected)  

Beispiel B: Ausschließliches Suchen nach den zehn häufigsten ÜbereinstimmungenExample B: Searching for the top ten matches

Im folgenden Beispiel wird CONTAINSTABLE verwendet, um die Beschreibung der ersten 5 Produkte zurückzugeben, bei denen die Description -Spalte das Wort "aluminium" in der Nähe des Worts "light" oder "lightweight" enthält.The following example uses CONTAINSTABLE to return the description of the top 5 products where the Description column contains the word "aluminum" near either the word "light" or the word "lightweight".

USE AdventureWorks2012  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
GO  

Ordnen von Suchabfrageergebnissen nach RangHow Search Query Results Are Ranked

Die Volltextsuche in SQL ServerSQL Server kann eine optionale Bewertung (einen Rangwert) generieren, die die Relevanz der von einer Volltextabfrage zurückgegebenen Daten angibt.Full-text search in SQL ServerSQL Server can generate an optional score (or rank value) that indicates the relevance of the data returned by a full-text query. Dieser Rangwert wird für jede Zeile berechnet und als Sortierkriterium verwendet, um das Resultset einer bestimmten Abfrage nach Relevanz zu sortieren.This rank value is calculated on every row and can be used as an ordering criteria to sort the result set of a given query by relevance. Die Rangwerte geben lediglich eine relative Relevanzreihenfolge der Zeilen im Resultset an.The rank values indicate only a relative order of relevance of the rows in the result set. Die tatsächlichen Werte sind nicht von Bedeutung und unterscheiden sich i. d. R. bei jeder Ausführung der Abfrage.The actual values are unimportant and typically differ each time the query is run. Der Rangwert hat keinerlei abfrageüberschreitende Bedeutung.The rank value does not hold any significance across queries.

Statistiken für die RangfolgeStatistics for Ranking

Beim Erstellen eines Indexes werden Statistiken für die Reihenfolgebestimmung gesammelt.When an index is built, statistics are collected for use in ranking. Der Vorgang der Erstellung eines Volltextkatalogs führt nicht direkt zu einer einzelnen Indexstruktur.The process of building a full-text catalog does not directly result in a single index structure. Stattdessen erstellt die Volltext-Engine für SQL ServerSQL Server beim Indizieren der Daten Zwischenindizes.Instead, the Full-Text Engine for SQL ServerSQL Server creates intermediate indexes as data is indexed. Anschließend werden diese Indizes von der Volltextsuch-Engine bei Bedarf in einen größeren Index zusammengeführt.The Full-Text Engine then merges these indexes into a larger index as needed. Dieser Vorgang kann mehrfach wiederholt werden.This process can be repeated many times. Die Volltextsuch-Engine führt einen "Mastermergeprozess" aus, bei dem alle Zwischenindizes zu einem größeren Masterindex kombiniert werden.The Full-Text Engine then conducts a "master merge" that combines all of the intermediate indexes into one large master index.

Auf jeder Zwischenstufe werden Statistiken erhoben.Statistics are collected at each intermediate index level. Die Statistiken werden beim Zusammenführen der Indizes zusammengeführt.The statistics are merged when the indexes are merged. Einige statistische Werte können nur während des Mastermergeprozesses generiert werden.Some statistical values can only be generated during the master merging process.

Beim Generieren der Rangfolge für ein Abfrageresultset verwendet SQL ServerSQL Server Statistiken vom größten Zwischenindex.While ranking a query result set, SQL ServerSQL Server uses statistics from the largest intermediate index. Dies hängt davon ab, ob Zwischenindizes zusammengeführt wurden oder nicht.This depends on whether intermediate indexes have been merged or not. Demzufolge kann die Rangfolgestatistik unterschiedlich genau ausfallen, wenn die Zwischenindizes nicht zusammengeführt wurden.As a result, ranking statistics can vary in accuracy if the intermediate indexes have not been merged. Dies erklärt, warum dieselbe Abfrage zu verschiedenen Zeitpunkten unterschiedliche Rangergebnisse zurückgeben kann, wenn volltextindizierte Daten hinzugefügt, geändert und gelöscht werden und wenn die kleineren Indizes zusammengeführt werden.This explains why the same query can return different rank results over time as full-text indexed data is added, modified, and deleted, and as the smaller indexes are merged.

Häufig werden die Statistiken gerundet, um die Größe des Indexes und die Komplexität der Berechnung zu minimieren.To minimize the size of the index and computational complexity, statistics are often rounded.

Die nachstehende Liste enthält einige häufig verwendete Begriffe und statistische Werte, die beim Berechnen des Rangs wichtig sind:The list below includes some commonly used terms and statistical values that are important in calculating rank.

EigenschaftProperty
Eine volltextindizierte Spalte der Zeile.A full-text indexed column of the row.

DokumentDocument
Die Entität, die in Abfragen zurückgegeben wird.The entity that is returned in queries. In SQL ServerSQL Server entspricht dies einer Zeile.In SQL ServerSQL Server this corresponds to a row. Ein Dokument kann mehrere Eigenschaften aufweisen, ebenso wie eine Zeile mehrere volltextindizierte Spalten aufweisen kann.A document can have multiple properties, just as a row can have multiple full-text indexed columns.

IndexIndex
Ein einzelner invertierter Index mindestens eines Dokuments.A single inverted index of one or more documents. Er kann sich vollständig im Arbeitsspeicher oder auf dem Datenträger befinden.This may be entirely in memory or on disk. Viele Abfragestatistiken sind relativ zu dem jeweiligen Index, mit dem der Vergleich ausgeführt wurde.Many query statistics are relative to the individual index where the match occurred.

VolltextkatalogFull-Text Catalog
Eine Auflistung von Zwischenindizes, die für Abfragen als eine Entität behandelt wird.A collection of intermediate indexes treated as one entity for queries. Kataloge sind die Organisationseinheit, die für den SQL ServerSQL Server -Administrator sichtbar ist.Catalogs are the unit of organization visible to the SQL ServerSQL Server administrator.

Wort, Token oder ElementWord, token or item
Die Vergleichseinheit in der Volltext-Engine.The unit of matching in the full-text engine. Textströme aus Dokumenten werden durch eine sprachspezifische Wörtertrennung in Wörter oder Token zerlegt.Streams of text from documents are tokenized into words, or tokens by language-specific word breakers.

VorkommenOccurrence
Der von der Wörtererkennung bestimmte Offset eines Worts in einer Dokumenteigenschaft.The word offset in a document property as determined by the word breaker. Das erste Wort stellt Vorkommen 1 dar, das nächste 2 usw.The first word is at occurrence 1, the next at 2, and so on. Um falsche Treffer in Ausdrucks- und NEAR-Abfragen zu vermeiden, bewirken Satzende- und Absatzendezeichen größere Abstände zwischen den Vorkommen.In order to avoid false positives in phrase and proximity queries, end-of-sentence and end-of-paragraph introduce larger occurrence gaps.

TermFrequencyTermFrequency
Die Anzahl der Vorkommen des Schlüsselwerts in einer Zeile.The number times the key value occurs in a row.

IndexedRowCountIndexedRowCount
Gesamtanzahl der indizierten Zeilen.Total number of rows indexed. Diese wird aus den in den Zwischenindizes geführten Zählern berechnet.This is computed, based on counts maintained in the intermediate indexes. Die Genauigkeit der Anzahl kann variieren.This number can vary in accuracy.

KeyRowCountKeyRowCount
Gesamtanzahl der Zeilen im Volltextkatalog, die einen bestimmten Schlüssel enthalten.Total number of rows in the full-text catalog that contain a given key.

MaxOccurrenceMaxOccurrence
Das größte in einem Volltextkatalog gespeicherte Vorkommen für eine bestimmte Eigenschaft in einer Zeile.The largest occurrence stored in a full-text catalog for a given property in a row.

MaxQueryRankMaxQueryRank
Der maximale Rang, 1000, der von der Volltextsuch-Engine zurückgegeben wird.The maximum rank, 1000, returned by the Full-Text Engine.

Gesichtspunkte bei der RangberechnungRank Computation Issues

Der Vorgang der Rangberechnung hängt von mehreren Faktoren ab.The process of computing rank, depends on a number of factors. Die Wörtererkennung für unterschiedliche Sprachen zerlegt Text unterschiedlich in Wörter.Different language word breakers tokenize text differently. So könnte z. B. die Zeichenfolge "dog-house" von einer Wörtererkennung in "dog" "house" und von einer anderen in "dog-house" zerlegt werden.For example, the string "dog-house" could be broken into "dog" "house" by one word breaker and into "dog-house" by another. Dies bedeutet, dass Vergleiche und Rangfolgenberechnung je nach der angegebenen Sprache unterschiedliche Ergebnisse liefern, da nicht nur die Wörter unterschiedlich sind, sondern auch die Dokumentlänge.This means that matching and ranking will vary based on the language specified, because not only are the words different, but so is the document length. Die unterschiedliche Dokumentlänge kann sich auf die Rangfolgenberechnung für alle Abfragen auswirken.The document length difference can affect ranking for all queries.

Statistiken wie IndexRowCount können stark variieren.Statistics such as IndexRowCount can vary widely. Hat z. B. ein Katalog 2 Milliarden Zeilen im Masterindex, wird ein einzelnes neues Dokument in einen im Arbeitsspeicher befindlichen Zwischenindex indiziert, und die Ränge für das Dokument, die auf der Anzahl der Dokumente im Index im Arbeitsspeicher basieren, können im Vergleich zu den Rängen für Dokumente aus dem Masterindex verfälscht sein.For example, if a catalog has 2 billion rows in the master index, then one new document is indexed into an in-memory intermediate index, and ranks for that document based on the number of documents in the in-memory index could be skewed compared with ranks for documents from the master index. Daher wird empfohlen, dass die Indizes nach jeder Auffüllung, durch die viele Zeilen indiziert oder neu indiziert werden, in einen Masterindex zusammengeführt werden, mithilfe der ALTER FULLTEXT CATALOG ... REORGANIZE Transact-SQLTransact-SQL-Anweisung.For this reason, it is recommended that after any population that results in large number of rows being indexed or re-indexed the indexes be merged into a master index using the ALTER FULLTEXT CATALOG ... REORGANIZE Transact-SQLTransact-SQL statement. Entsprechend bestimmten Parametern, wie Anzahl und Größe der Zwischenindizes, werden die Indizes auch automatisch von der Volltextsuch-Engine zusammengeführt.The Full-Text Engine will also automatically merge the indexes based on parameters such as the number and size of intermediate indexes.

MaxOccurrence -Werte werden in den Bereich 1 bis 32 normalisiert.MaxOccurrence values are normalized into 1 of 32 ranges. Das heißt, dass z. B. ein 50 Wörter langes Dokument genau so behandelt wird wie ein 100 Wörter langes.This means, for example, that a document 50 words long is treated the same as a document 100 words long. Die zur Normalisierung verwendete Tabelle ist unten aufgeführt.Below is the table used for normalization. Da die Dokumentlängen im Bereich zwischen den benachbarten Tabellenwerten 32 und 128 liegen, werden sie behandelt, als hätten sie dieselbe Länge, nämlich 128 (32 < docLength <= 128).Because the document lengths are in the range between adjacent table values 32 and 128, they are effectively treated as having the same length, 128 (32 < docLength <= 128).

{ 16, 32, 128, 256, 512, 725, 1024, 1450, 2048, 2896, 4096, 5792, 8192, 11585,   
16384, 23170, 28000, 32768, 39554, 46340, 55938, 65536, 92681, 131072, 185363,   
262144, 370727, 524288, 741455, 1048576, 2097152, 4194304 };  
  

Rangfolge von CONTAINSTABLERanking of CONTAINSTABLE

Beim Generieren der Rangfolge fürCONTAINSTABLE wird der folgende Algorithmus verwendet:CONTAINSTABLE ranking uses the following algorithm:

StatisticalWeight = Log2( ( 2 + IndexedRowCount ) / KeyRowCount )  
Rank = min( MaxQueryRank, HitCount * 16 * StatisticalWeight / MaxOccurrence )  

Der Rang von Übereinstimmungen in Ausdrücken wird genauso bestimmt wie einzelne Schlüssel, außer dass KeyRowCount (die Anzahl von Zeilen, die den Ausdruck enthalten) geschätzt wird und somit ungenau und höher als die tatsächliche Anzahl ausfallen kann.Phrase matches are ranked just like individual keys except that KeyRowCount (the number of rows containing the phrase) is estimated and can be inaccurate and higher than the actual number.

Rangfolge von NEARRanking of NEAR

CONTAINSTABLE unterstützt das Abfragen von zwei oder mehr Suchbegriffen mithilfe der NEAR-Option hinsichtlich ihrer Nähe zueinander.CONTAINSTABLE supports querying for two or more search terms in proximity to each other by using the NEAR option. Der Rangwert der einzelnen zurückgegebenen Zeilen basiert auf mehreren Parametern.The rank value of each returned row is based on several parameters. Ein Hauptrangfaktor ist die Gesamtzahl der Übereinstimmungen (oder Treffer) in Bezug auf die Länge des Dokuments.One major ranking factor is the total number of matches (or hits) relative to the length of the document. Wenn beispielsweise ein Dokument mit 100 Wörtern und ein Dokument mit 900 Wörtern identische Übereinstimmungen enthalten, wird dem Dokument mit 100 Wörtern ein höherer Rangwert zugewiesen.Thus, for example, if a 100-word document and a 900-word document contain identical matches, the 100-word document is ranked higher.

Die Gesamtlänge der einzelnen Treffer in einer Zeile trägt ebenfalls zum Rangwert der betreffenden Zeile bei, wobei die Entfernung zwischen dem ersten und dem letzten Suchbegriff des jeweiligen Treffers zugrunde gelegt wird.The total length of each hit in a row will also contribute to the ranking of that row based on the distance between the first and last search terms of that hit. Je kleiner die Entfernung, desto relevanter ist der Treffer für den Rangwert der Zeile.The smaller the distance, the more the hit contributes to the rank value of the row. Wenn eine Volltextabfrage keine ganze Zahl angibt (z. B. die maximale Entfernung), weist ein Dokument, das nur Treffer enthält, deren Entfernungen weiter als 100 logische Begriffe auseinander liegen, einen Rang von 0 (null) auf.If a full-text query does not specify an integer as the maximum distance, a document that contains only hits whose distances are greater than 100 logical terms apart, will have a ranking of 0.

Rangfolge von ISABOUTRanking of ISABOUT

CONTAINSTABLE unterstützt das Abfragen von gewichteten Begriffen mit der ISABOUT-Option.CONTAINSTABLE supports querying for weighted terms by using the ISABOUT option. ISABOUT ist eine Vektorraumabfrage in traditioneller Information Retrieval-Terminologie.ISABOUT is a vector-space query in traditional information retrieval terminology. Der verwendete Standardalgorithmus zur Rangfolgenberechnung ist Jaccard, eine bekannte Formel.The default ranking algorithm used is Jaccard, a widely known formula. Die Rangfolge wird für jeden Begriff in der Abfrage berechnet und anschließend wie nachstehend beschrieben kombiniert.The ranking is computed for each term in the query and then combined as described below.

ContainsRank = same formula used for CONTAINSTABLE ranking of a single term (above).  
Weight = the weight specified in the query for each term. Default weight is 1.  
WeightedSum = Σ[key=1 to n] ContainsRankKey * WeightKey  
Rank =  ( MaxQueryRank * WeightedSum ) / ( ( Σ[key=1 to n] ContainsRankKey^2 )   
      + ( Σ[key=1 to n] WeightKey^2 ) - ( WeightedSum ) )  
  

Rangfolge von FREETEXTTABLERanking of FREETEXTTABLE

Die Rangfolgenberechnung fürFREETEXTTABLE basiert auf der OKAPI BM25-Rangfolgenformel.FREETEXTTABLE ranking is based on the OKAPI BM25 ranking formula. Bei FREETEXTTABLE-Abfragen werden der Abfrage durch Wortformengenerierung Flexionsformen der ursprünglichen Abfragewörter hinzugefügt; diese Wörter werden als separate Wörter ohne besondere Beziehung zu den Wörtern behandelt, aus denen sie generiert wurden.FREETEXTTABLE queries will add words to the query via inflectional generation (inflected forms of the original query words); these words are treated as separate words with no special relationship to the words from which they were generated. Aus der Thesaurus-Funktion generierte Synonyme werden als separate, gleich gewichtete Begriffe behandelt.Synonyms generated from the Thesaurus feature are treated as separate, equally weighted terms. Jedes Wort in der Abfrage wird bei der Rangberechnung einbezogen.Each word in the query contributes to the rank.

Rank = Σ[Terms in Query] w ( ( ( k1 + 1 ) tf ) / ( K + tf ) ) * ( ( k3 + 1 ) qtf / ( k3 + qtf ) ) )  
Where:   
w is the Robertson-Sparck Jones weight.   
In simplified form, w is defined as:   
w = log10 ( ( ( r + 0.5 ) * ( N - R + r + 0.5 ) ) / ( ( R - r + 0.5 ) * ( n - r + 0.5 ) )  
N is the number of indexed rows for the property being queried.   
n is the number of rows containing the word.   
K is ( k1 * ( ( 1 - b ) + ( b * dl / avdl ) ) ).   
dl is the property length, in word occurrences.   
avdl is the average length of the property being queried, in word occurrences.   
k1, b, and k3 are the constants 1.2, 0.75, and 8.0, respectively.   
tf is the frequency of the word in the queried property in a specific row.   
qtf is the frequency of the term in the query.   

Weitere InformationenSee Also

Abfragen mit VolltextsucheQuery with Full-Text Search