Suchkriteriendifferenz zwischen Like und Contains () in Oracle

7

Ich habe eine Tabelle mit zwei Spalten erstellt. Ich habe zwei Zeilen eingefügt.

%Vor%

Einer ist einfach ein Zahlentyp und ein anderer ist ein CLOB-Typ. Also entschied ich mich dafür, Indizierung zu verwenden. Ich habe das mit contains abgefragt.  Abfrage:

%Vor%

Ich habe erwartet, dass 2 kommen würde, aber nicht. Aber wenn ich dasselbe gebe, wie es gegeben ist, was ich wollte. Abfrage:

%Vor%

endlich habe ich verstanden, dass das Ganze Dokument oder Absatz sucht, aber enthält, in Wörtern sucht.

Wie kann ich die erforderliche Ausgabe erhalten?

    
narsireddy 18.04.2011, 09:17
quelle

2 Antworten

20

LIKE und CONTAINS sind grundsätzlich verschiedene Suchmethoden.

LIKE ist ein sehr einfaches String Pattern Matcher - Es erkennt zwei Platzhalter (%) und (_), die mit null oder mehr oder genau einem Zeichen übereinstimmen. In Ihrem Fall entspricht% a% e% zwei Datensätzen in Ihrer Tabelle - sie sucht nach null oder mehr Zeichen, gefolgt von a , gefolgt von null oder mehr Zeichen gefolgt von e , gefolgt von null oder mehr Zeichen. Es ist auch sehr einfach in seinem Rückgabewert: es gibt entweder "abgestimmt" oder "nicht übereinstimmend" - keine Graustufen.

CONTAINS ist ein leistungsstarkes Suchwerkzeug, das a. verwendet Kontextindex, der eine Art Wortbaum erstellt, der mit der CONTAINS-Suchsyntax durchsucht werden kann. Es kann verwendet werden, um nach einem einzelnen Wort, einer Kombination von Wörtern, zu suchen und hat eine eigene reiche Syntax, wie zum Beispiel boolesche Operatoren (AND, NEAR, ACCUM). Es ist auch insofern leistungsfähiger, als dass anstelle eines einfachen "matched" oder "not matched" ein "score" zurückgegeben wird, der verwendet werden kann, um Ergebnisse in der Reihenfolge der Relevanz zu ordnen; z.B. CONTAINS (col, 'Hund NEAR cat') gibt eine höhere Punktzahl für ein Dokument zurück, bei dem beide Wörter nahe beieinander liegen.

    
Jeffrey Kemp 18.04.2011 13:34
quelle
3

Ich glaube, dass Ihre CONTAINS -Abfrage "narei sia" entspricht, weil das Muster "% a% e%" mit dem Wort "narei" übereinstimmt. Es passt nicht zu 'narsi reddy', weil kein Wort für sich genommen mit dem Muster übereinstimmt.

Ich nehme an, dass Sie aus Leistungsgründen CONTAINS anstelle von LIKE verwenden möchten. Ich bin keineswegs ein Experte für CONTAINS Query-Ausdrücke, aber ich sehe keine einfache Möglichkeit, die exakte Suche, die Sie wollen, zu tun, da Sie nach Buchstaben suchen, die im selben Wort oder in verschiedenen Wörtern sein können, aber muss in einer bestimmten Reihenfolge auftreten. Ich denke, dass es am besten ist, eine Kombination der beiden Techniken zu machen:

%Vor%

Ich denke, das würde es erlauben, den Textindex zu verwenden, um passende Übereinstimmungen zu finden (alles, was mindestens ein Wort enthält, das 'a' und mindestens ein Wort enthält, das 'e' enthält). Diese würden dann durch die Bedingung LIKE gefiltert werden, wodurch die Anforderung, dass 'a' in der Zeichenkette vor 'e' steht, erzwungen wird.

    
Dave Costa 18.04.2011 13:57
quelle

Tags und Links