Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Sie können in einem CONTAINS-Prädikat oder in einer CONTAINSTABLE-Funktion mithilfe des NäherungsbegriffsNEAR nach Wörtern oder Ausdrücken suchen, die sich ähnlich sind.
Übersicht über NEAR
NEAR umfasst die folgenden Funktionen:
Sie können die maximale Anzahl von nicht als Suchkriterium festgelegten Begriffen angeben, die zwischen dem ersten und dem letzten Suchbegriff liegen.
Sie können in einer beliebigen Reihenfolge oder in einer angegebenen Reihenfolge nach Wörtern oder Ausdrücken suchen.
Sie können die maximale Anzahl von Nicht-Suchbegriffen oder den maximalen Abstand zwischen dem ersten und dem letzten Suchbegriff festlegen, damit eine Übereinstimmung vorliegt.
Wenn Sie die maximale Anzahl von Begriffen angeben, können Sie auch angeben, dass Übereinstimmungen die Suchbegriffe in der angegebenen Reihenfolge enthalten müssen.
Um als Übereinstimmung zu gelten, muss eine Textzeichenfolge folgende Kriterien erfüllen:
Sie muss mit einem der angegebenen Suchbegriffe beginnen und mit einem der anderen angegebenen Suchbegriffe enden.
Sie muss alle angegebenen Suchbegriffe enthalten.
Die Anzahl der nicht als Suchkriterien angegebenen Begriffe (einschließlich von Stoppwörtern), die zwischen dem ersten Suchbegriff und dem letzten Suchbegriff liegen, muss kleiner oder gleich dem ggf. festgelegten maximalen Abstand sein.
Syntax von NEAR
Die grundlegende Syntax von NEAR lautet:
NEAR (
{
*search_term* [ ,...*n* ]
|
(*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
Weitere Informationen zur Syntax finden Sie unter CONTAINS (Transact-SQL).
Beispiele
Beispiel 1
Sie können z. B. innerhalb der zwei Begriffe von 'Smith' wie folgt nach 'John' suchen:
... CONTAINS(column_name, 'NEAR((John, Smith), 2)')
Zwei Beispiele für Übereinstimmungszeichenfolgen sind "John Jacob Smith" und "Smith, John." Die Zeichenfolge "John Jones knows Fred Smith" enthält drei dazwischenliegende Nicht-Suchbegriffe, daher handelt es sich um keine Übereinstimmung.
Um festzulegen, dass die Begriffe in der angegebenen Reihenfolge gefunden werden müssen, müssen Sie den NEAR-Begriff im Beispiel in NEAR((John, Smith),2, TRUE). ändern. Damit wird in zwei Begriffen von "John" nach "Smith" gesucht, jedoch nur, wenn "John" vor "Smith" enthalten ist. In einer von links nach rechts geschriebenen Sprache wie Englisch ist "John Jacob Smith" ein Beispiel für eine übereinstimmende Zeichenfolge.
Beachten Sie, dass die Volltext-Engine bei von rechts nach links geschriebenen Sprachen (z. B. Arabisch oder Hebräisch) die angegebenen Begriffe in umgekehrter Reihenfolge anwendet. Außerdem kehrt der Objekt-Explorer in SQL Server Management Studio die Anzeigereihenfolge von Wörtern in Sprachen mit einer Schreibrichtung von rechts nach links automatisch um.
Beispiel 2
Im folgenden Beispiel wird die Tabelle Production.Document der Beispieldatenbank AdventureWorks nach allen Dokumentzusammenfassungen durchsucht, bei denen das Wort "reflector" im selben Dokument wie das Wort "bracket" enthalten ist.
SELECT DocumentNode, Title, DocumentSummary
FROM Production.Document AS DocTable
INNER JOIN CONTAINSTABLE(Production.Document, Document,
'NEAR(bracket, reflector)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 50
ORDER BY KEY_TBL.RANK DESC;
GO
Messen des maximalen Abstands
Ein bestimmter maximaler Abstand (z. B. 10 oder 25) gibt an, wie viele Nicht-Suchbegriffe (einschließlich von Stoppwörtern) in einer angegebenen Zeichenfolge zwischen dem Suchbegriff und dem letzten Suchbegriff auftreten können.
NEAR((dogs, cats, "hunting mice"), 3) gibt z. B. die folgende Zeile zurück, in der die Gesamtzahl der Nicht-Suchbegriffe gleich 3 ist ("enjoy", "but" und "avoid"):
"Catshunting mice``, but avoidenjoydogs``."
Derselbe Näheoperator würde die folgende Zeile nicht zurückgeben, da der maximale Abstand durch die vier Nichtsuchbegriffe ("enjoy", "but", "usually" und "avoid") überschritten würde:
"Catshunting mice``, but usually avoidenjoydogs``."
Kombinieren von NEAR mit anderen Begriffen
Sie können NEAR mit einigen anderen Begriffen kombinieren. Sie können AND (&), OR (|) oder AND NOT (&!) verwenden, um einen benutzerdefinierten NEAR-Begriff mit einem anderen benutzerdefinierten NEAR-Begriff, einem einfachen Begriff oder einem Präfixbegriff zu kombinieren. Zum Beispiel:
CONTAINS('NEAR((Begriff1, Begriff2),5) AND Begriff3')
CONTAINS('NEAR((Begriff1, Begriff2),5) OR Begriff3')
CONTAINS('NEAR((Begriff1, Begriff2),5) AND NOT Begriff3')
CONTAINS('NEAR((Begriff1, Begriff2),5) AND NEAR((Begriff3, Begriff4),2)')
CONTAINS('NEAR((Begriff1, Begriff2),5) OR NEAR((Begriff3, Begriff4),2, TRUE)')
Beispiel:
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
NEAR kann nicht mit einem Generierungsbegriff (ISABOUT …) oder einem gewichteten Begriff (FORMSOF …) kombiniert werden.
Weitere Informationen zu Nähe-Suchen
Überlappende Vorkommen von Suchbegriffen
In allen NEAR-Suchen wird ausschließlich nach einander nicht überschneidenden Vorkommen gesucht. Einander überschneidende Vorkommen von Suchbegriffen gelten nie als Übereinstimmungen. Betrachten Sie zum Beispiel den folgenden Näheoperator, mit dem nach "
A" und "AA" in dieser Reihenfolge mit einem maximalen Abstand von zwei Termen gesucht wird:CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')Die möglichen Übereinstimmungen sind "
AAA", "A.AA" und "A..AA". Zeilen, die nur "AA" enthalten, würden nicht übereinstimmen.Hinweis
Sie können Begriffe angeben, die einander überschneiden, z. B.
NEAR("mountain bike", "bike trails")oder(NEAR(comfort*, comfortable), 5). Durch das Angeben einander überschneidender Begriffe wird die Abfrage komplexer, da die möglichen Übereinstimmungspermutationen vergrößert werden. Wenn Sie eine große Anzahl von einander überschneidenden Begriffen angeben, verfügt die Abfrage möglicherweise nicht über ausreichende Ressourcen, und sie schlägt fehl. Vereinfachen Sie in einem solchen Fall die Abfrage, und führen Sie sie noch einmal aus.NEAR gibt (unabhängig von der Angabe eines maximalen Abstands) den logischen Abstand zwischen Begriffen und nicht deren absoluten Abstand an. Begriffe, die sich innerhalb eines Absatzes innerhalb verschiedener Ausdrücke oder Sätze befinden, werden beispielsweise als weiter voneinander entfernt behandelt als Begriffe im gleichen Ausdruck oder im gleichen Satz, und zwar unabhängig von ihrer tatsächlichen Nähe und unter der Annahme, dass sie weniger verwandt sind. Begriffe in anderen Absätzen werden entsprechend so behandelt, als wären sie noch weiter entfernt. Wenn sich eine Übereinstimmung über das Ende eines Satzes, Absatzes oder Kapitels erstreckt, wird die Lücke, die zum Generieren der Rangfolge eines Dokuments verwendet wird, um 8, 128 bzw. 1024 vergrößert.
Auswirkungen von Nähebegriffen auf die Rangfolge durch die CONTAINSTABLE-Funktion
Wenn NEAR in der CONTAINSTABLE-Funktion verwendet wird, wirken sich die Anzahl der Treffer in einem Dokument relativ zu seiner Länge sowie der Abstand zwischen dem ersten und dem letzten Suchbegriff in den einzelnen Treffern auf die Rangfolge des jeweiligen Dokuments aus. Wenn die übereinstimmenden Suchbegriffe bei einem generischen NEAR-Begriff >50 logische Begriffe voneinander entfernt sind, ist der für ein Dokument zurückgegebene Rang 0. Wenn für einen benutzerdefinierten Näherungsbegriff keine ganze Zahl als maximaler Abstand angegeben ist, erhält ein Dokument, das nur Treffer enthält, deren Abstand weniger als >100 logische Begriffe beträgt, eine Rangfolge von 0. Weitere Informationen zur Gewichtung von benutzerdefinierten Proximitätssuchen finden Sie unter Suchergebnisse mit RANK einschränken.
Die Option zum Transformieren von Störwörtern auf dem Server
Der Wert von Transform-Rauschwörtern beeinflusst, wie SQL Server Stopwords behandelt, wenn sie in Proximity-Suchen angegeben sind. Weitere Informationen finden Sie unter Füllwörtertransformation (Serverkonfigurationsoption).