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