Suchkriterien Unterschied zwischen vs Contains() in oracle
Ich eine Tabelle erstellt mit zwei Spalten.Ich habe zwei Zeilen eingefügt.
id name
1 narsi reddy
2 narei sia
ist einfach Nummer geben und ein anderer Typ CLOB.So entschied ich mich für die Indizierung auf die. Ich fragte auf, dass durch die Verwendung enthält.
Abfrage:
select * from emp where contains(name,'%a%e%')>0
2 narei sia
Erwartete ich, 2 kommen würde,aber nicht. Aber wenn ich dasselbe mit wie es ist gegeben, was ich wollte.
Abfrage:
select * from emp where name like '%a%e%'
ID NAME
1 (CLOB) narsi reddy
2 (CLOB) narei sia
2 rows selected
endlich habe ich verstanden, dass wie ist auf der Suche ganze Dokument oder Absatz enthält, sondern sucht in Worte zu fassen.
so, wie bekomme ich die gewünschte Ausgabe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
GEFÄLLT, und ENTHÄLT grundsätzlich sind verschiedene Methoden für die Suche.
WIE ist eine sehr einfache string-pattern-matcher - es erkennt zwei wildcards (%) und ( _ ), die mit null-oder-mehr-oder genau das-ein -, Zeichen-bzw. In Ihrem Fall, %a,%e% entspricht zwei Datensätze in der Tabelle sieht es für null oder mehr Zeichen gefolgt von
a
, gefolgt von null oder mehr Zeichen gefolgt vone
, gefolgt von null oder mehr Zeichen. Es ist auch sehr simpel in seiner Rückgabewert: gibt es entweder "abgeglichen" oder "nicht-übereinstimmung" - keine Schattierungen von Grau.ENTHÄLT ist eine leistungsfähige such-tool, das verwendet ein Kontext-index, der baut eine Art word-Baumes, der durchsucht werden kann, mithilfe der CONTAINS such-syntax. Es kann verwendet werden, um die Suche nach einem einzelnen Wort, einer Kombination von Wörtern, und hat eine reiche syntax von seiner eigenen, wie Boolesche Operatoren (AND, NEAR, ACCUM). Es ist auch stärker, dass anstatt eines einfachen "abgestimmt" oder "nicht abgestimmt", gibt es eine "Partitur", die verwendet werden können, um die Rangfolge der Ergebnisse in der Reihenfolge Ihrer Relevanz; z.B. CONTAINS(col, 'Hund in der NÄHE von cat') wird wieder eine höhere Punktzahl für ein Dokument, in dem diese beiden Worte, die beide in der Nähe zusammen.
LIKE
tun . Angenommen ich habe einen stringperson name is himans
. Wenn ich die Suche durchcontains
fürers
ich bekommen leer ?ers
in einem string verwendenlike
oderinstr
.Ich glaube, dass Ihr
CONTAINS
Abfrage passt 'narei sia", weil das Muster '%a,%e%' entspricht dem Wort 'narei'. Es entspricht nicht gegen 'narsi reddy', weil weder Wort, einzeln genommen, der dem Muster entspricht.Ich nehme an, Sie verwenden möchten
CONTAINS
stattLIKE
aus performance-Gründen. Ich bin keineswegs ein Experte aufCONTAINS
Abfrage-Ausdrücke, aber ich sehe nicht einen einfachen Weg, um die genaue Suche, die Sie möchten, denn Sie sind auf der Suche nach Buchstaben, die in der gleichen Wortes oder verschiedener Wörter, sondern muß auftreten in einer bestimmten Reihenfolge. Ich denke es ist am besten zu tun ist eine Kombination der beiden Techniken:Ich denke, dies würde es ermöglichen, die text-index zu finden, Kandidaten-matches (alles, was mindestens ein Wort mit 'a' und mindestens ein Wort mit 'e'). Diese würde dann gefiltert werden, indem die
LIKE
Bedingung für die Durchsetzung der Forderung, dass 'a' vorausgehen 'e' in der Zeichenkette.