Hier wird AND und OR auch noch beachtet...

Ist jedoch vom Prinzip her ne schlechte Source.

MfG

Christian Thuer

RSBegriffe.close
  RSBegriffe.Open "SELECT * FROM begriffe where ((keywords like
'%"&strin&"%') and ((titel like
'%"&strin&"%')))",DBConnShare,adOpenForwardOnly,adLockReadOnly,adCMDText
  if not (RSBegriffe.EOF) then
   listausgabe()
   RSBegriffe.close
  else
   RSBegriffe.close
   RSBegriffe.Open "SELECT * FROM begriffe where (keywords like
'%"&strin&"%')",DBConnShare,adOpenForwardOnly,adLockReadOnly,adCMDText
   if not (RSBegriffe.EOF) then
    listausgabe()
    RSBegriffe.close
   else
    RSBegriffe.close
    'Suchbegriff eingegeben...
    'Schneide Suchbegriff nun zurecht
    'Illegale Zeichen entfernen...
    searched = replace (Request.Querystring ("text"), """", "")
    searched = replace (searched, "(", " ")
    searched = replace (searched, ")", " ")
    searched = replace (searched, "%", " ")
    'Nicht eindeutige Zeichen/Ausdruecke ausgleichen
    searched = replace (searched, "&", "+")
    searched = replace (searched, "!", "-")
    searched = replace (searched, "|", "�")
    searched = replace (searched, "*", "+")
    searched = replace (searched, " AND ", " + ")
    searched = replace (searched, " and ", " + ")
    searched = replace (searched, " OR ", " � ")
    searched = replace (searched, " or ", " � ")
    searched = replace (searched, " NOT ", " - ")
    searched = replace (searched, " not ", " - ")
    'Spaces loeschen...
    searched = replace (searched, "  ", " ")
    searched = replace (searched, " +", "+")
    searched = replace (searched, "+ ", "+")
    searched = replace (searched, " -", "-")
    searched = replace (searched, "- ", "-")
    searched = replace (searched, " �", "�")
    searched = replace (searched, "� ", "�")
    searched = replace (searched, " #", "#")
    searched = replace (searched, "# ", "#")
    'Nicht eindeutige Eingaben Anpassen...
    searched = replace (searched, "+-", "-")
    searched = replace (searched, "+�", "�")
    searched = replace (searched, "+#", "#")
    searched = replace (searched, "-�", "#")
    searched = replace (searched, "�-", "#")
    searched = replace (searched, " ", "+")
 
    'Generiere nun Abfragequery...
    zaehler = 1
    vorzeich = ""
    strin = ""
    querystr = ""
    do while (zaehler <= len(searched))
     if Mid(searched, zaehler, 1) = "+" then
      'Wenn AND
      if not (strin="") then
       querystr = querystr + vorzeich+"(keywords like '%"&strin&"%')"
       strin = ""
       vorzeich = " AND "
      end if
     else
      if Mid(searched, zaehler, 1) = "-" then
       'Wenn NOT (AND NOT)
       if not (strin="") then
        querystr = querystr + vorzeich+"(keywords like '%"&strin&"%')"
        strin = ""
        vorzeich = " AND NOT "
       end if
      else
       if Mid(searched, zaehler, 1) = "�" then
        'Wenn OR
        if not (strin="") then
         querystr = querystr + vorzeich+"(keywords like '%"&strin&"%')"
         strin = ""
         vorzeich = " OR "
        end if
       else
        if Mid(searched, zaehler, 1) = "#" then
         'Wenn NOT OR
         if not (strin="") then
          querystr = querystr + vorzeich+"(keywords like '%"&strin&"%')"
          strin = ""
          vorzeich = " OR NOT "
         end if
        else
         strin = strin + Mid(searched, zaehler, 1)
        end if
       end if
      end if
     end if
     zaehler = zaehler + 1
    loop
    if not (strin="") then
     querystr = querystr + vorzeich+"(keywords like '%"&strin&"%')"
    end if
    'Ausgabe dessen, was gefunden wurde...
    RSBegriffe.Open "SELECT * FROM begriffe where
("&querystr&")",DBConnShare,adOpenForwardOnly,adLockReadOnly,adCMDText
    

> -----Original Message-----
> From: Azubi IFK LabTec [mailto:[EMAIL PROTECTED]]
> Sent: Dienstag, 2. April 2002 13:12
> To: ASP Datenbankprogrammierung
> Subject: [aspdedatabase] RE: AW: RE: AW: RE: AW: suchengine
> 
> 
> Mal einen kleinen Denkansatz...
> 
> Es wird ein SQL Query generiert...
> 
> Im moment werden noch s�mmtliche + - AND OR NOT ... durch ein 
> OR ersetzt...
> 
> Liesse sich jedoch gleich implementieren.
> 
> M�sste nur dies anderst schreiben:
> while InStr(querytext," ") <> 0
>   Wert = Left(querytext,InStr(querytext," ")-1)
>   if Wert <> "" then wherestr = wherestr & "(keywords + 
> description + titel
> Like '%"&Wert&"%') OR"  
>   querytext = 
> Right(querytext,len(querytext)-InStr(querytext," "))      
>  wend
> 
> 
> L�sst sich sicher auch gut in SP's realisieren.
> 
> MfG
> 
> Christian Thuer
> 
> querysql = "select abspath, titel, description, keywords from 
> dateien where"
> 
> querytext = replace (querytext, "'", """")
> querytext = replace (querytext, "&", "+")
> querytext = replace (querytext, " AND ", "+")
> querytext = replace (querytext, " and ", "+")
> querytext = replace (querytext, " OR ", "|")
> querytext = replace (querytext, " or ", "|")
> querytext = replace (querytext, "�", "|")
> querytext = replace (querytext, " Not ", " ! ")
> querytext = replace (querytext, "*", "")
> querytext = replace (querytext, ".", "")
> if ((inStr (querytext, "+") = 0) and (inStr (querytext, "|") 
> = 0) and (inStr
> (querytext, " ! ") = 0)) then
>  querytext = replace (querytext, "   ", " ")
>  querytext = replace (querytext, "  ", " ")
>  if instr(querytext, """")=0 then
>   printHeader
>   while InStr(querytext," ") <> 0
>    Wert = Left(querytext,InStr(querytext," ")-1)
>    if Wert <> "" then wherestr = wherestr & "(keywords + 
> description + titel
> Like '%"&Wert&"%') OR"  
>    querytext = 
> Right(querytext,len(querytext)-InStr(querytext," "))      
>   wend
>   wherestr = wherestr & "(keywords + description + titel Like
> '%"&querytext&"%')"  
>   executeSQL
>   printFeet
>  else
>   querytext = replace (querytext, """", "")
>   printHeader
>   wherestr = "(keywords like '%"&querytext&"%') and (description like
> '%"&querytext&"%') and (titel like '%"&querytext&"%')"
>   executeSQL
>   wherestr = "((keywords like '%"&querytext&"%') and 
> ((description like
> '%"&querytext&"%') xor (titel like '%"&querytext&"%'))) xor 
> ((titel like
> '%"&querytext&"%') and (description like '%"&querytext&"%') 
> and not(keywords
> like '%"&querytext&"%'))"
>   executeSQL
>   wherestr = "(((titel like '%"&querytext&"%') xor (description like
> '%"&querytext&"%')) and not (keywords like '%"&querytext&"%')) xor
> ((keywords like '%"&querytext&"%') and not ((titel like 
> '%"&querytext&"%')
> OR (description like '%"&querytext&"%')))"
>   executeSQL
>   printFeet
>  end if
> else
>  'Complexe Query
>  querytext = replace (querytext, "+", " ")
>  querytext = replace (querytext, "|", " ")
>  querytext = replace (querytext, " ! ", " ")
>  querytext = replace (querytext, "   ", " ")
>  querytext = replace (querytext, "  ", " ")
>  printHeader
>  while InStr(querytext," ") <> 0
>   Wert = Left(querytext,InStr(querytext," ")-1)
>   if Wert <> "" then wherestr = wherestr & "(keywords + 
> description + titel
> Like '%"&Wert&"%') OR"  
>   querytext = 
> Right(querytext,len(querytext)-InStr(querytext," "))      
>  wend
>  wherestr = wherestr & "(keywords + description + titel Like
> '%"&querytext&"%')"  
>  executeSQL
>  printFeet
> end if
> %>
> 
> > -----Original Message-----
> > From: Andreas Roth [mailto:[EMAIL PROTECTED]]
> > Sent: Dienstag, 2. April 2002 12:55
> > To: ASP Datenbankprogrammierung
> > Subject: [aspdedatabase] AW: RE: AW: RE: AW: suchengine
> > 
> > 
> > Textmails, Jan, Textmails!
> > 
> > Also, wir haben
> > #temp
> > ------
> > SearchPartID
> > ResultsID
> > 
> > jetzt wir einzeln nach jaguar (SearchPartID = 1), puma 
> > (SearchPartID = 2)
> > und animal (SearchPartID = 3) gefragt.
> > 
> > Jetzt haben wir in #temp ein ResultsID also evt. mehrfach 
> > vorliegen: Zum
> > Beispiel weil der Jaguar als Animal eingetragen war (sagen wir als
> > ResultsID= 1. Auch die Marke befindet sich darin als ResultsID = 2
> > 
> > Dann sieht #temp vielleicht so aus:
> > (Suche nach Jaguar und nicht Animal)
> > SearchPartID    ResultsID
> > 1               1             Jaguar als Suchergebniss von "Jaguar"
> > 1               2             Jaguar als Suchergebniss von "Animal"
> > 2               1             anderer Jaguar als 
> > Suchergebniss von "Jaguar"
> > 
> > Wenn du nun fragst:
> > SELECT ResultsID FROM #Temp WHERE ResultsID IN (SELECT 
> > ResultsID FROM #Temp
> > WHERE SearchPartID=1) AND NOT IN (SELECT ResultsID FROM #Temp WHERE
> > SearchPartID=2)
> > 
> > wird er dir als Ergebniss nur den dritten Satz zur�ckgeben.
> > 
> > Ich pers�nlich bastle solche Suchstrings immer im 
> > Datenbankclient zusammen.
> > Aber f�r einen ge�bten SP Programierer istr es sicher kein 
> > Problem, dass
> > komplett in einer SP zu kapseln.
> > 
> > Gru�, Andreas, http://www.drhirn.com/EuphoriasChild
> > 
> > -----Urspr�ngliche Nachricht-----
> > Von: Jan Mlekusch [mailto:[EMAIL PROTECTED]]
> > Gesendet: Dienstag, 2. April 2002 12:46
> > An: ASP Datenbankprogrammierung
> > Betreff: [aspdedatabase] RE: AW: RE: AW: suchengine
> > 
> > 
> > hallo
> > danke
> > wenn jetzt zb ein user in der suchmaske folgendes eingibt:
> > "jaguar OR puma" NOT animal
> > dies ist die Frage. Wie soll ich das abfangen, dass nun in 
> > allen Feldern
> > nach 'jaguar' oder 'puma' gesucht wird, jedoch nicht nach 'animal'
> > weisst Du was ich meine?
> > Jan
> > -----Original Message-----
> > From: Andreas Roth [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, April 02, 2002 12:29 PM
> > To: ASP Datenbankprogrammierung
> > Subject: [aspdedatabase] AW: RE: AW: suchengine
> > 
> > 
> > 
> > z.B.:
> > WHERE Ergebniss IN() AND Ergebniss  IN () OR Ergebniss NOT IN ()
> > Geht also alles, auch verschachteln.
> > Gru�, Andreas, http://www.drhirn.com/EuphoriasChild
> > -----Urspr�ngliche Nachricht-----
> > Von: Jan Mlekusch [mailto:[EMAIL PROTECTED]]
> > Gesendet: Dienstag, 2. April 2002 12:26
> > An: ASP Datenbankprogrammierung
> > Betreff: [aspdedatabase] RE: AW: suchengine
> > 
> > 
> > hallo
> > ja, danke genau so mache ich es jetzt auch. Frage alle tabellen ab,
> > speichere deren id in eine #Tabelle und lese am schluss die 
> restlichen
> > felder aus.
> > die frage ist wie implementiere ich am einfachsten funktionen 
> > wie AND OR NOT
> > etc.
> > Jan
> > PS: ich sende textmails
> > -----Original Message-----
> > From: Andreas Roth [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, April 02, 2002 12:01 PM
> > To: ASP Datenbankprogrammierung
> > Subject: [aspdedatabase] AW: suchengine
> > 
> > 
> > Hallo Jan,
> > bitte sende der Liste nur Text eMails,
> > Die L�sung deines Problems k�nnte recht einfach sein:
> > Du fragst die Teile deiner Suche jeweils einzeln ab und legst 
> > sie in einer
> > tempor�ren(kann natrlich auch eine Statische sein) Tabelle 
> > ein, die zB. so
> > aufgebaut ist:
> > tempResults
> > ------------
> > SearchID (wenn es eine statische ist, musst du die einzelne Suchen
> > voneinander unterscheiden k�nnen)
> > PartID (einen Teil der Aktuellen Suche zb: von dir vergebenb 
> > Suchbegriff
> > "Stored & Procedure" = "Stored"->1 "Procedure"->2)
> > ResultsIDs (Identifizierung des Ergebnisses)
> > Am Schlus l�sst du eine Abfrage �ber diese Tabelle laufen:
> > SELECT ResultsIDs FROM tempResults WHERE ResultsIDs IN 
> > (SELECT ResultsIDs
> > FROM tempResults WHERE PartID= 1) AND ResultsIDs IN(SELECT 
> > ResultsIDs FROM
> > tempResults WHERE PartID= 1)
> > oder eben statt AND OR usw.
> > Gruss, Andreas
> > -----Urspr�ngliche Nachricht-----
> > Von: Jan Mlekusch [mailto:[EMAIL PROTECTED]]
> > Gesendet: Dienstag, 2. April 2002 11:44
> > An: ASP Datenbankprogrammierung
> > Betreff: [aspdedatabase] suchengine
> > 
> > 
> > Hi
> > Folgende Frage:
> > Habe eine Website auf welcher ich eine Suchengine platziert 
> > habe, mit der
> > ich Werte aus einer SQL DB heraushole.
> > Es sind mehrere Attribute aus mehreren Entit�ten, welche ich 
> > aus der DB
> > hole, sodass das ganze sehr komplex wird.
> > Bis jetzt habe ich das in einer stored Procedure gel�st, 
> > welche aber sehr
> > umfangreich geworden ist. (wenn jmd die sp haben m�chte, kann 
> > ich gerne
> > Mailen, ist aber zu lang f�r dieses Posting, nur 50k erlaubt)
> > Nun, die Logik der Suchengine (SE) habe ich mir 
> > selbstgestrickt. Nun m�chte
> > ich diese SE ausbauen, sodass mit AND OR etc.  Ist die 
> > verwendung des MS
> > Index Server Express eine M�glichkeit? Oder soll man besser 
> > �ber/mit XML
> > suchen (habe keine Ahnung von, aber wenns der Sache dient!). 
> > Fr�her hatte
> > ich in einem ASP Script gesucht, welches immer auf den SQL 
> > zugegriffen hat,
> > was allerdings performance Probleme verursacht hat (verst�ndlich).
> > Hat jmd einen guten Ansatz, den ich weiterverfolgen k�nnte?
> > besten Dank
> > Jan Mlekusch
> > Software Engineer
> > ----------------------
> > antax ag
> > Heimstrasse 46
> > CH-8953 Dietikon
> > Pho: +41  1 745 67 00
> > Fax: +41  1 745 67 21
> > Mob: +41 79 757 40 17
> > ----------------------
> > mail: [EMAIL PROTECTED]
> > web:  www.antax.ch
> > 
> > 
> > 
> > ----------------------
> > Diese E-Mail enth�lt vertrauliche und/oder rechtlich gesch�tzte
> > Informationen. Wenn Sie nicht der richtige Adressat sind oder 
> > diese E-Mail
> > irrt�mlich erhalten haben, informieren Sie bitte sofort den 
> > Absender und
> > vernichten Sie diese Mail. Das unerlaubte Kopieren sowie 
> die unbefugte
> > Weitergabe dieser Mail ist nicht gestattet.
> > This e-mail may contain confidential and/or privileged 
> > information. If you
> > are not the intended recipient (or have received this 
> e-mail in error)
> > please notify the sender immediately and destroy this e-mail. Any
> > unauthorised copying, disclosure or distribution of the 
> > material in this
> > e-mail is strictly forbidden.
> > | [aspdedatabase] als [EMAIL PROTECTED] subscribed |
> > http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv 
> > | Sie k�nnen
> > sich unter folgender URL an- und abmelden: |
> > http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> > 
> > 
> > | [aspdedatabase] als [EMAIL PROTECTED] subscribed
> > | http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
> > | Sie k�nnen sich unter folgender URL an- und abmelden:
> > | 
http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> | [aspdedatabase] als [EMAIL PROTECTED] subscribed |
> http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv 
> | Sie k�nnen
> sich unter folgender URL an- und abmelden: |
> http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> 
> 
> | [aspdedatabase] als [EMAIL PROTECTED] subscribed
> | http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
> | Sie k�nnen sich unter folgender URL an- und abmelden:
> | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> | [aspdedatabase] als [EMAIL PROTECTED] subscribed |
> http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv 
> | Sie k�nnen
> sich unter folgender URL an- und abmelden: |
> http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> 
> 
> | [aspdedatabase] als [EMAIL PROTECTED] subscribed
> | http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
> | Sie k�nnen sich unter folgender URL an- und abmelden:
> | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
> 

| [aspdedatabase] als [EMAIL PROTECTED] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp

| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp

Antwort per Email an