CONTAINS ( column-name [,...], contains-query-string )
contains-query-string : simple-expression | or-expression
simple-expression : primary-expression | and-expression
or-expression : simple-expression { OR | | } contains-query-string
primary-expression : basic-expression | FUZZY " fuzzy-expression " | and-not-expression
and-expression : primary-expression [ AND | & ] simple-expression
and-not-expression : primary-expression [ AND | & ] { NOT | - } basic-expression
basic-expression : term | phrase | ( contains-query-string ) | near-expression | before-expression
fuzzy-expression : term | fuzzy-expression term
term : simple-term | prefix-term
prefix-term :
simple-term*
phrase : " phrase-string "
near-expression : term NEAR [ [ min-distance ], max-distance ] term | term { NEAR | ~ } term
before-expressions : term BEFORE [ [ min-distance ] max-distance ] term | term BEFORE term
phrase-string : term | phrase-string term
simple-term: Eine Zeichenfolge, die durch Leerzeichen und Sonderzeichen unterbrochen wird und einen einzelnen, indizierten Begriff (Wort) darstellt, nach dem gesucht werden soll.
distance: Eine positive Ganzzahl
and-expression Gibt an, dass sowohl primary-expression als auch simple-expression im Textindex gefunden werden müssen.
Standardmäßig gilt: Wenn zwischen Begriffen oder Ausdrücken kein Operator steht, wird and-expression angenommen. 'a b'
wird beispielsweise als 'a AND b'
interpretiert.
Ein kaufmännisches Und (&) kann anstelle von AND verwendet werden und ohne Zwischenraum an beiden Seiten an die Ausdrücke
oder Begriffe gesetzt werden (Beispiel: 'a &b'
).
and-not-expression Gibt an, dass primary-expression im Textindex vorhanden sein muss, aber der basic-expression im Textindex nicht enthalten sein darf. Dies wird auch als Negation bezeichnet.
Wenn Sie einen Bindestrich für die Negation verwenden, muss links vor dem Bindestrich ein Leerzeichen gesetzt werden, rechts
nach dem Bindestrich hingegen muss der Begriff ohne Leerzeichen unmittelbar folgen, da sonst der Bindestrich nicht als Negationszeichen
angesehen wird. Beispiel: 'a -b'
ist gleich 'a AND NOT b'
, während bei 'a - b'
der Bindestrich ignoriert wird und die Zeichenfolge 'a AND b'
entspricht. 'a-b'
entspricht der Phrase '"a b"'
.
or-expression
Gibt an, dass entweder simple-expression oder contains-query-string im Textindex vorhanden sein muss. 'a|b'
wird beispielsweise als 'a OR b'
interpretiert.
fuzzy-expression Sucht nach Begriffen, die dem angegebenen Begriff ähnlich sind. Fuzzy-Suchen werden nur in NGRAM-Textindizes unterstützt.
near-expression
Sucht nach Begriffen, die nahe beieinander liegen. Dies wird auch als Nachbarschaftssuche bezeichnet. 'b NEAR[5] c'
sucht beispielsweise nach Vorkommen von b und c, die maximal fünf Begriffe voneinander entfernt sind. Die Reihenfolge der
Begriffe ist nicht wichtig. 'b NEAR c'
entspricht 'c NEAR b'
.
Wenn die maximale Entfernung nicht angegeben ist, beträgt die Standardentfernung 10. Wenn die Mindestentfernung nicht angegeben ist, beträgt der Standardwert 1.
Die Abfrage 'apple NEAR[2, 10] tree'
findet Übereinstimmungen in den folgenden Dokumenten:
"apple grows on the tree" "apple and tree" "tree and apple" |
Die Abfrage findet jedoch keine Übereinstimmungen in den folgenden Dokumenten:
"apple tree" "tree apple" |
Sie können statt NEAR auch eine Tilde (~) eingeben. Die Verwendung einer Tilde ist gleichwertig mit dem Angeben von NEAR ohne Entfernung, sodass standardmäßig von höchstens 10 Begriffen und mindestens 1 Begriff ausgegangen wird. Sie können keine Höchst- oder Mindestentfernung angeben, wenn Sie eine Tilde verwenden. Der Wert beträgt dann immer 10 Begriffe.
NEAR-Ausdrücke können nicht verkettet werden (z.B. ist 'a NEAR[1] b NEAR[1] c'
ungültig).
before-expression
Verwenden Sie before-expression, um nach einem Begriff suchen, der vor einen anderen Begriff steht. Dies wird auch als Nachbarschaftssuche bezeichnet. Die Argumente müssen im übereinstimmenden Text in derselben Reihenfolge gefunden werden, wie sie in der CONTAINS-Abfragezeichenfolge
angegeben sind. 'apple BEFORE[2, 10] tree'
findet beispielsweise Übereinstimmungen in den folgenden Dokumenten:
"apple grows on the tree" "apple and tree" |
Die Abfrage findet jedoch keine Übereinstimmungen in den folgenden Dokumenten:
"tree and apple" "apple tree" "tree apple" |
Die folgenden Abfragen sind gleichwertig:
'apple BEFORE tree' 'apple BEFORE[10] tree' 'apple BEFORE[1, 10] tree' |
Wenn die maximale Entfernung nicht angegeben ist, beträgt die Standardentfernung 10. Wenn die Mindestentfernung nicht angegeben ist, beträgt der Standardwert 1.
prefix-term
Sucht nach Begriffen, die mit dem angegebenen Präfix beginnen. Beispiel: 'datab*'
sucht nach einem Begriff, der mit datab beginnt. Dies wird auch als Präfixsuche bezeichnet. In einer Präfixsuche werden Übereinstimmungen in dem Abschnitt des Begriffs gesucht, der sich links vom Sternchen
befindet.
Die CONTAINS-Suchbedingung übernimmt eine Spaltenliste und contains-query-string als Argumente. Sie kann überall dort verwendet werden, wo eine Suchbedingung (auch als Prädikat bezeichnet) angegeben werden kann, und gibt TRUE oder FALSE zurück. contains-query-string muss eine Konstantenzeichenfolge oder eine Variable sein, mit einem Wert, der zum Zeitpunkt der Abfrage bekannt ist. contains-query-string darf weder NULL oder eine leere Zeichenfolge sein noch 300 gültige Begriffe überschreiten. Ein gültiger Begriff ist ein Begriff, der innerhalb der zulässigen Begriffslänge liegt und nicht in die Stoppliste aufgenommen wurde. Ein Fehler wird zurückgegeben, wenn contains-query-string 300 gültige Begriffe überschreitet.
Wenn die Textkonfigurationseinstellungen bewirken, dass alle Begriffe in contains-query-string ausgeschlossen werden, lautet das Ergebnis der CONTAINS-Suchbedingung FALSE.
Weitere Hinweise zur Interpretation von contains-query-string finden Sie unter Beispiel-Textkonfigurationsobjekte.
Wenn mehrere Spalten angegeben werden, müssen sie sich alle auf eine einzige Basistabelle beziehen. Ein Textindex kann sich nicht über mehrere Basistabellen erstrecken. Diese Basistabelle kann direkt in der FROM-Klausel referenziert werden oder sie kann in einer Ansicht oder einer abgeleiteten Tabelle verwendet werden.
Die folgenden Warnungen gelten für die Verwendung von nicht-alphanumerischen Zeichen in Abfragezeichenfolgen:
Ein Stern in der Mitte eines Begriffs bewirkt die Rückgabe eines Fehlers.
Nicht alphanumerische Zeichen (einschließlich Sonderzeichen) dürfen nicht in fuzzy-expression verwendet werden, weil sie als Leerzeichen behandelt werden und als Begriffsegmentierer fungieren.
Wenn möglich, sollten nicht-alphanumerische Zeichen, die keine Sonderzeichen sind, in einer Abfragezeichenfolge nicht verwendet
werden. Jedes nicht-alphanumerische Zeichen, das kein Sonderzeichen ist, bewirkt, dass der Begriff, in dem es vorkommt, als
Phrase behandelt wird, wobei der Begriff an der Stelle des Zeichens segmentiert wird. 'things we've done'
wird beispielsweise als 'things "we ve" done'
interpretiert.
Innerhalb von Phrasen ist der Stern das einzige Sonderzeichen, das weiterhin als Sonderzeichen interpretiert wird. Alle anderen Sonderzeichen in Phrasen werden als Leerzeichen interpretiert und als Begriffssegmentierer verwendet.
Die Interpretation von contains-query-string erfolgt in zwei Hauptschritten:
Schritt 1: Interpretation von Operatoren und Vorrang Während dieses Schrittes werden Schlüsselwörter als Operatoren interpretiert und Vorrangregeln angewendet.
Schritt 2: Anwendung von Einstellungen für das Textkonfigurationsobjekt Während dieses Schrittes werden die Einstellungen für Textkonfigurationsobjekte auf die Begriffe angewendet. Beispiel: Bei einem NGRAM-Textindex werden Begriffe in ihre n-gram-Darstellung segmentiert. Während dieses Schrittes werden die Abfragebegriffe, die die Einstellungen für die Begriffslänge überschreiten oder in der Stoppliste enthalten sind, entfernt.
Während der Auswertung der Abfrage werden die Ausdrücke gemäß der nachstehenden Vorrangfolge ausgewertet:
FUZZY, NEAR
AND NOT
AND
OR
SQL Anywhere unterstützt derzeit nicht das BEFORE-Schlüsselwort als Operator. Wenn Sie zum Beispiel "CONTAINS(column-name, 'a before b')
" angeben, wird ein Fehler zurückgegeben. Erstellen Sie Ihre Abfrage stattdessen mit dem NEAR-Schlüsselwort.
Sie können nach dem Wort before suchen, sofern es Teil einer Phrasenabfrage ist. z. B. CONTAINS(column-name, '"a before b"')
. Dies sucht nach der Phrase "a before b".
Das Sternchen wird für die Präfixsuche verwendet. Ein Sternchen muss entweder am Ende der Abfragezeichenfolge stehen oder es muss ein Leerzeichen, ein kaufmännisches Und, ein Senkrechtstrich, eine geschlossene eckige Klammer oder ein schließendes Anführungszeichen darauf folgen. In allen anderen Fällen wird ein Fehler gemeldet.
In der folgenden Tabelle werden die zulässigen Verwendungsmöglichkeiten für einen Sternchen-Platzhalter angegeben:
Abfragezeichenfolge | Entspricht | Interpretiert als |
---|---|---|
|
Suche nach allen Begriffen, die mit th beginnen. | |
|
|
Suche nach einem Begriff, der mit th beginnt, und nach dem Begriff best. |
|
|
Suche entweder nach einem Begriff, der mit th beginnt, oder nach dem Begriff "best". |
|
|
Suche nach dem Begriff "very" und dem Begriff "best" oder einem beliebigen Begriff, der mit th beginnt. |
|
Suche nach dem Begriff "fast", auf den unmittelbar ein Begriff folgt, der mit auto beginnt. | |
|
Suche nach einem Begriff, der mit auto beginnt und auf den unmittelbar der Begriff "price" folgt. |
Die Interpretation der Abfragezeichenfolgen mit Sternchen kann je nach den Einstellungen für das Textkonfigurationsobjekt unterschiedlich ausfallen.
Der Bindestrich kann für die Negation eines Begriffs oder Ausdrucks verwendet werden und entspricht NOT. Ob ein Bindestrich als Negation interpretiert wird, hängt von seiner Stellung in der Abfragezeichenfolge ab. Wenn beispielsweise ein Bindestrich direkt vor einem Begriff oder Ausdruck steht, wird er als Negation interpretiert. Wenn ein Bindestrich in einen Begriff eingebettet ist, wird er als Bindestrich interpretiert.
Vor einem als Negation verwendeten Bindestrich muss ein Leerzeichen stehen und danach muss unmittelbar ein Ausdruck folgen.
Ein Bindestrich in einer Phrase oder einem Annähernden_Ausdruck wird als Leerzeichen interpretiert und als Begriffssegmentierer verwendet.
Die nachstehende Tabelle zeigt die zulässige Syntax für einen Bindestrich:
Abfragezeichenfolge | Entspricht: | Interpretiert als: |
---|---|---|
|
|
Suche nach dem Begriff "the", aber nicht nach dem Begriff "best". |
|
'the AND NOT (very AND best)' |
Suche nach dem Begriff "the", aber nicht nach den Begriffen "very" und "best". |
|
'the AND NOT "very best"' |
Suche nach dem Begriff "the", aber nicht nach der Phrase "very best". |
|
|
Suche nach dem Begriff "alpha", auf den unmittelbar der Begriff "numerics" folgt. |
|
|
Suche den Begriff "wild" und den Begriff "west". |
Die nachstehende Tabelle zeigt die zulässige Syntax für alle Sonderzeichen mit Ausnahme von Sternchen und Bindestrich.
Diese Zeichen werden nicht als Sonderzeichen angesehen, wenn sie in einer Phrase vorkommen, und daher entfernt.
Dieselben Einschränkungen hinsichtlich der Angabe von Zeichenfolgenliteralen gelten auch für die Abfragezeichenfolge. So müssen beispielsweise die Apostrophe mit Escapezeichen versehen werden, usw.
Zeichen oder Syntax | Beispiele zur Verwendung und Bemerkungen |
---|---|
Kaufmännisches Und (&) |
Das kaufmännische Und entspricht AND und kann folgendermaßen angegeben werden:
|
Senkrechtstrich (|) |
Der Senkrechtstrich entspricht OR und kann folgendermaßen angegeben werden:
|
Anführungszeichen (") |
Anführungszeichen werden verwendet, um eine Folge von Begriffen abzugrenzen, in der die Reihenfolge und der relative Abstand
wichtig sind. In der Abfragezeichenfolge |
Klammern () |
Klammern werden verwendet, um die Reihenfolge der Auswertung von Ausdrücken anzugeben, wenn sie von der Standardreihenfolge
abweicht. Beispiel: |
Tilde (~) |
Die Tilde ist gleichwertig mit NEAR[10]. Die Abfragezeichenfolge Sie können mit der Tilde keine Entfernung angeben. |
Eckige Klammern [ ] | Eckige Klammern werden in Verbindung mit dem NEAR-Schlüsselwort verwendet, um distance anzugeben. Bei jeder anderen Verwendung von eckigen Klammern wird ein Fehler zurückgegeben. |
SQL/2008 Das Prädikat CONTAINS ist eine Erweiterung des Herstellers.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |