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
