tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
938
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SeeSharpNewBee SeeSharpNewBee ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    200
    Hi,

    meine Frage bezieht sich auf auf eines Strings um eine Datenbank zu durchsuchen.

    Bisher habe ich folgendes gemacht:

    Ich habe den in die Textbox eingegebenen Wert mit eine StringTokenizer zerlegt, und auf vorzeichen wie "+" und "-" geprüft.

    Nun stehe ich irgendwie an, weil ich auch gern hätte, das wenn jemand ein Wort unter Anführungszeichen stellt, das dieses Wort nicht vom StringTokenizer zerlegt wird.

    Ich hätte schon versucht mit "String delim" nur bei Leerzeichen zu teilen, aber zwischen den Wörtern, wenn sie unter Anführungsstrichen stehen ist auch ein leerzeichen.

    Ich würde gern wissen, wie man soetwas richtig aufbaut, zb. wie die Forensuche hier.

    Kann mir jemand ein paar Codeschnippsel oder einen Link zu einer fertigen Lösung geben? Oder auch anders irgendwie helfen? Danke!
     
    MFG SeeSharpNewBee

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    /**
     * 
     */
    package de.tutorials;
     
    /**
     * @author Tom
     *
     */
    public class SearchTokenSplitter {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            String qry ="ABC DEF \"XXX YYY\" 4711";
            
            qry = qry.replaceAll("(?<!\"[^\\s])\\s(?![^\\s]+\")", "%");
            qry = "%" + qry.replace("\"","") + "%";
            
            System.out.println(qry);
        }
     
    }

    Ausgabe:
    Code :
    1
    
    %ABC%DEF%XXX YYY%4711%

    Wenn du nun noch mit - Arbeiten möchtest um bestimmte Suchworte in den Ergebnissen auszuschließen musst do wohl noch einmal über den Query String drüber gehen und dann die Wörter die nicht vorkommen sollen aus der normalen Query rausnehmen und in eine Negativ-Liste legen.

    Dann machst du in der Abfrage...
    Negativ liste wäre als Beispiel:
    -bubu -gaga
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    SELECT 
    * 
    FROM 
    DATA 
    WHERE 
    (content LIKE '%ABC%DEF%XXX YYY%4711%' --exact match
    OR content LIKE '%ABC%' -- partial match
    OR content LIKE '%DEF%' -- partial match
    OR content LIKE '%XXX YYY%' -- partial match
    OR content LIKE '%4711%' ) -- partial match  
    AND 
    (content NOT LIKE '%bubu%gaga%'
    OR content NOT LIKE '%bubu%'
    OR content NOT LIKE '%gaga%'
    )

    Anstatt sowas selber zu bauen würde ich hier eher Lucene verwenden:
    http://lucene.apache.org/java/docs/
    Die haben dort fix und fertige Module für sehr ausgefeilte Textsuche in Textdateien und Datenbanken....

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    SeeSharpNewBee SeeSharpNewBee ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    200
    Danke für die Antwort, ich würde gern deine Lesezeichenliste sehen...

    Ganz klar komme ich trotzdem noch nicht, ich habe die .jar datei jetzt heruntergeladen, und hab versucht das zu testen.

    Ich hab die Doku durchgelesen, und bin auf folgendes gekommen:

    How can I use Lucene to index a database?

    Connect to the database using JDBC and use an SQL "SELECT" statement to query the database. Then create one Lucene Document object per row and add it to the index. You will probably want to store the ID column so you can later access the matching items. For other (text) columns it might make more sense to only index (not store) them, as the original data is still available in your database.
    OK, "use an SQL 'SELECT'", aber da kann ich das dann auch wieder selber machen und brauch Lucene nicht wirklich oder?

    Oder soll ich nur die Methode "queryParser" verwenden um meinen SQL String zu bauen?

    ... bitte hilfe...


    //EDIT:

    Jetzt hab ich verstanden wie das Ding arbeiet, jedoch weiß ich immer noch nicht wie ich einen Such String bauen kann, da hab ich noch nichts gefunden.

    Sobald alles fertig ist, poste ich ein komplettes Beispiel!
    Geändert von SeeSharpNewBee (01.06.07 um 15:18 Uhr)
     
    MFG SeeSharpNewBee

Ähnliche Themen

  1. Datenbank durchsuchen
    Von Hanseatic im Forum .NET Datenverwaltung
    Antworten: 6
    Letzter Beitrag: 18.02.08, 20:14
  2. Datenbank durchsuchen!
    Von proloser im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 15.12.06, 22:22
  3. datenbank durchsuchen
    Von uzge77 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 25.07.05, 15:56
  4. Datenbank durchsuchen
    Von jokaz11 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 28.05.05, 18:52
  5. Datenbank durchsuchen ^^
    Von m4nueL im Forum PHP
    Antworten: 8
    Letzter Beitrag: 02.09.02, 15:18