Verwenden der Volltextsuche¶
Sie können Suchfunktionen verwenden, um Zeichendaten (Text) und IP-Adressen in bestimmten Spalten aus einer oder mehreren Tabellen zu finden, einschließlich Felder in den Spalten VARIANT, OBJECT und ARRAY. Diese Funktion durchsucht den Text in bestimmten Spalten oder Zeichenfolgen auf der Grundlage einer Liste vorgegebener Suchbegriffe. Die Funktion gibt TRUE zurück, wenn der Text anhand der Suchsemantik mit den angegebenen Suchbegriffen übereinstimmt.
In den meisten Fällen rufen Sie die Funktion SEARCH auf, indem Sie sie in der SELECT-Liste oder in der WHERE-Klausel einer SELECT-Anweisung angeben. Wenn die Funktion als WHERE-Klausel-Filter verwendet wird, gibt die Abfrage Zeilen zurück, wenn die Funktion TRUE zurückgibt.
Die Funktion SEARCH erfordert kein Setup und keine zusätzlichen Berechtigungen. Wenn Sie eine Rolle verwenden, die über die Berechtigung zum Zugriff auf die Daten in einer Spalte verfügt, können Sie mit der Funktion SEARCH nach diesen Daten suchen.
In den nächsten Abschnitten finden Sie weitere Informationen über die Funktion SEARCH und über die Optimierung der Leistung von Abfragen, wenn Sie sie verwenden:
Verwenden der Funktion SEARCH¶
Die Funktion SEARCH findet Zeichendaten (Text) in angegebenen Spalten aus einer oder mehreren Tabellen, einschließlich Feldern in VARIANT-, OBJECT- und ARRAY-Spalten.
When you use the SEARCH function, a text analyzer breaks the text into tokens, which are discrete units of text, such as words or numbers. A default analyzer is applied if you don’t specify one. The analyzer extracts tokens from both the search terms and the data.
If tokens extracted from the search terms match tokens extracted from a specified column or field according to the search semantics, the function returns TRUE. The SEARCH_MODE function argument specifies one of the following search modes:
'OR'- The function uses disjunctive semantics. There is a match if any of the tokens extracted from the columns or fields being searched match any of the tokens extracted from the search string. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueORredORgreenin any of the columns or fields being searched.'AND'- The function uses conjunctive semantics. There is a match if the tokens extracted from at least one of the columns or fields being searched matches all of the tokens extracted from the search string. The matching tokens must all be in one column or field; they can’t be spread across multiple columns or fields. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueANDredANDgreenin at least one of the columns or fields being searched.'PHRASE': Die Funktion verwendet die Semantik der Phrasenübereinstimmung. Es gibt eine Übereinstimmung, wenn die Token, die aus mindestens einer der durchsuchten Spalten oder Felder extrahiert wurden, mit allen aus der Suchzeichenfolge extrahierten Token übereinstimmen, einschließlich der Reihenfolge und Umgebung der Token.Die Übereinstimmungssemantik ist die gleiche wie die konjunktive Semantik, mit Ausnahme der folgenden Unterschiede:
Die Reihenfolge der Token muss genau übereinstimmen. Wenn beispielsweise der
search_string-Wert'blue,red,green'ist, gibt die Funktion FALSE fürred,green,bluezurück.Es können keine zusätzlichen Token in die Suchdaten eingefügt werden. Wenn beispielsweise der
search_string-Wert'blue,red,green'ist, gibt die Funktion FALSE fürblue,yellow,red,greenzurück.
'EXACT': Die Funktion verwendet die Semantik der genauen Übereinstimmung. Es gibt eine Übereinstimmung, wenn die Token, die aus mindestens einer der durchsuchten Spalten oder Felder extrahiert wurden, genau mit allen aus der Suchzeichenfolge extrahierten Token übereinstimmen, einschließlich der Trennzeichen.Die Übereinstimmungsregeln sind die gleichen wie bei der Semantik der Phrasenübereinstimmung, mit Ausnahme der folgenden Unterschiede:
Die Trennzeichenfolgen zwischen den Token müssen genau übereinstimmen. Wenn beispielsweise der
search_string-Wert'blue,red,green'ist, gibt die Funktion TRUE für eine Zeile zurück, dieblue,red,greenin mindestens einer/einem der durchsuchten Spalten oder Felder enthält. Die Funktion gibt FALSE für Varianten wieblue|red|greenoderblue, red, greenzurück.Wenn ein Trennzeichen das erste oder letzte Zeichen im
search_string-Wert ist, wird das Trennzeichen beim Abgleich wie ein Zeichen behandelt. Daher können Trennzeichen links und rechts des ersten und letzten Trennzeichens zu einer Übereinstimmung führen. Wenn beispielsweise dersearch_string-Wert'[blue]'ist, gibt die Funktion TRUE fürfoo [blue] bar,[[blue]]und=[blue].zurück, aber nicht für(blue)oderfoo blue bar.
Das folgende Beispiel sucht nach der Zeichenfolge snow leopard im Text leopard mit der Vorgabe SEARCH_MODE ('OR') und dem Standard-Analysator:
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
Das folgende Beispiel sucht nach der Zeichenfolge snow leopard im Text lion:
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
Das folgende Beispiel sucht nach der Zeichenfolge snow leopard im Text leopard und gibt 'AND' für das Argument SEARCH_MODE an:
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
Weitere Informationen über diese Funktion und zusätzliche Beispiele finden Sie unter SEARCH.
Verwenden der Funktion SEARCH_IP¶
Die SEARCH_IP-Funktion findet gültige IPv4- und IPv6-Adressen in angegebenen Zeichenfolgenspalten aus einer oder mehreren Tabellen, einschließlich Feldern in den Spalten VARIANT. OBJECT und ARRAY. Die Suche basiert auf einer einzelnen IP-Adresse, die Sie angeben. Wenn diese IP-Adresse genau mit einer IP-Adresse in der angegebenen Spalte oder dem angegebenen Feld übereinstimmt, gibt die Funktion TRUE zurück.
Das folgende Beispiel sucht nach der IP-Adresse 10.10.10.1 im Text 192.0.2.146:
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
Weitere Informationen über diese Funktion und zusätzliche Beispiele finden Sie unter SEARCH_IP.
Optimierung von Abfragen, die die Funktion SEARCH verwenden¶
Um die Leistung von Abfragen, die diese Funktion verwenden, zu verbessern, können Sie optional die FULL_TEXT-Suchoptimierung für eine bestimmte Spalte oder eine Reihe von Spalten in einer Tabelle aktivieren. Wenn Sie die Suchoptimierung aktivieren, wird ein neuer Suchzugriffspfad erstellt und gewartet.