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

Antwort per Email an