LIKE - Suche in DB

Status
Nicht offen für weitere Antworten.

smokie

Mitglied
Hallo zusammen !!!

Ich habe in meinem Java-Produktkatalog eine Artikelsuche und eine Volltextsuche.
Diese liefert aus meiner SQLite-Dartenbank jedoch nur Ergebnisse auf die genau eingegebene Bezeichnung.
Nun möchte ich meine Abfrage gern so programmieren, daß auch Begriffe mit Rechtschreibfehlern oder auch zb fehlenden Vokalen angenommen werden.

Wie geht sowas?
Entspricht die LIKE - Anweisung einer solchen Suche?
Hat damit nämlich igendwie nicht so ganz bei mir hingehauen.

Desweiteren läuft die Suche nicht, wenn es Leerzeichen innerhalb einer Artikelnummer gibt, Bspl: "K 5" liefert kein Ergebnis, sondern "K5".

Kann mir jemand weiterhelfen?
Danke. :roll:
 

bambi

Bekanntes Mitglied
Also mit LIKE kann man zB nicht "Meier" finden, wenn man "Meyer" eingibt. Da musst Du Dir schon was anderes schreiben, denk' ich.
Also mit
Code:
SELECT * FROM table WHERE name like '%Meier%'
wuerde alles gefunden werden, was den String "Meier" enthaelt - also sowas wie
- "Meier-Hansen"
- "Hans-Meier"
- "Meiersen"
- (und natuerlich) "Meier"
 

abollm

Top Contributor
Hmm, ganz nett die Links, aber jetzt weiß ich immer noch nicht wie ich den Java-Algorithmus implementieren muss. Trotzdem vielen Dank (ich wäre heute wohl nicht mehr darauf gekommen, bei Wikipedia nachzuschauen).
 

smokie

Mitglied
Danke für die schnellen Antworten.
Gibt es denn einen Algorithmus für die Fuzzy-Suche?
Weiss jemand wie ich das mit dem Leerzeichen lösen kann?
 

smokie

Mitglied
habe mal diverse foren nach der fuzzy-suche durchsucht aber kein programmierbeispiel gefunden.
dabei ist das doch eigentlich gar nicht sowas aussergewöhnliches, oder?!
 

Bleiglanz

Gesperrter Benutzer
DP hat gesagt.:
%k 5% findet aber nicht k5?!

ist leider so

es gibt halt nur den wildcard % am anfang oder am ende

welche db hast du denn, ggf. gibts einfach sowas wie die SOUNDEX-Funktion (die immerhin nach ähnlich klingenden strings sucht)

glaube aber nicht, dass du eine query hinbekommst, die

fook 5mal

udn

giik5susi

mit einem suchausdruck finden kann...
 

smokie

Mitglied
hab ne SQLite-DB.
diese geschichte mit * und ? habe ich schon eingebaut.
wollte mein prog aber so benutzerfreundlich wie möglich gestalten und auch die unscharfe suche einbauen.
von dieser soundex-funktion habe ich auch gelesen.
gibt es sowas in java/sql ?
 

abollm

Top Contributor
smokie hat gesagt.:
habe mal diverse foren nach der fuzzy-suche durchsucht aber kein programmierbeispiel gefunden.
dabei ist das doch eigentlich gar nicht sowas aussergewöhnliches, oder?!

Ach, was mir gerade noch eingefallen ist:

In "The Art of Computer Programming, Bd. 3: Sorting and Searching" von Donald Earvin Knuth findest du auch einen Algorithmus für die phnonetische Darstellung.
 

smokie

Mitglied
danke für die hilfe.
werde damit mal etwas rumprobieren.

Code:
public class Soundex { 
    public static String soundex(String s) { 
       int SIZE = 4;
       char[] x = s.toUpperCase().toCharArray();
       char firstLetter = x[0];

       // convert letters to numeric code
       for (int i = 0; i < x.length; i++) {
          switch(x[i]) {
             case 'B':
             case 'F':
             case 'P':
             case 'V':   x[i] = '1'; break;

             case 'C':
             case 'G':
             case 'J':
             case 'K':
             case 'Q':
             case 'S':
             case 'X':
             case 'Z':   x[i] = '2'; break;

             case 'D':
             case 'T':   x[i] = '3'; break;

             case 'L':   x[i] = '4'; break;

             case 'M':
             case 'N':   x[i] = '5'; break;

             case 'R':   x[i] = '6'; break;

             default:    x[i] = '0'; break;
          }
       }

       // remove duplicates
       String output = "" + firstLetter;
       char last = x[0];
       for (int i = 1; i < x.length; i++) {
          if (x[i] != '0' && x[i] != last) {
             last = x[i];
             output += last;
          }
       }   

       // pad with 0's or truncate
       for (int i = output.length(); i < SIZE; i++)
          output += '0';
       output = output.substring(0, SIZE);

       return output;
    }


    public static void main(String[] args) {
       String name1 = args[0];
       String name2 = args[1];
       String code1 = soundex(name1);
       String code2 = soundex(name2);
       System.out.println(code1 + ": " + name1);
       System.out.println(code2 + ": " + name2);
    }
}
 

Bleiglanz

Gesperrter Benutzer
soundex(X)

Compute the soundex encoding of the string X. The string "?000" is returned if the argument is NULL. This function is omitted from SQLite by default. It is only available the -DSQLITE_SOUNDEX=1 compiler option is used when SQLite is built.
 

smokie

Mitglied
wow, nicht schlecht.
muss nur mal gucken wie ich da rein komme.
muss ich den SQLite dann selber builden oder gibts da ne stelle wo ich quasi von 0 auf 1 ändern kann?

edit: oder eine version wo soundex enabled ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L SQL-Suche Datenbankprogrammierung 2
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
R Suche den nächsten timestamp Datenbankprogrammierung 5
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
M SQLite Suche nach String Datenbankprogrammierung 4
K JPA Suche Datenbankprogrammierung 14
J SELECT Abfrage/Suche Datenbankprogrammierung 4
AssELAss Oracle Suche nach Umlauten Ä und Ae ermöglichen Datenbankprogrammierung 11
AssELAss Oracle Wildcard-Suche über zwei Felder Datenbankprogrammierung 5
ARadauer Umgekehrte Suche mit Wildcards Datenbankprogrammierung 4
N suche embedded key-value-datenkank Datenbankprogrammierung 2
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F suche Erstanschub für DB-Zugriff Datenbankprogrammierung 9
fastjack Kombinierte Suche und verschiedene Datumsformate Datenbankprogrammierung 2
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
A Suche Datenbankprogrammierung 4
U Suche OpenSource Projekt ? Datenbankprogrammierung 9
J Suche geeignete Datenbankstruktur Datenbankprogrammierung 3
M sql-code für suche in tabelle nach höchster transaktionsnr Datenbankprogrammierung 12
H Suche ein Hibernate-DAO-Gerüst zum lernen Datenbankprogrammierung 9
J Suche für meine Anwendung optimale Datenbank ! Datenbankprogrammierung 26
R MySQL Syntax für suche nach Textteil Datenbankprogrammierung 8
F Suche JDBC-Treiber-Installationsanleitung (SUSE Linux) Datenbankprogrammierung 18
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben