Im zweiten Teil geht es um die Implementierung des Query Scripts, welches die eigentliche Suche über den Index Server darstellt. Das Problematische ist die IX Query Language. Die Suchergebnisse kommen in Form eines ADO Recordsets zurück.
Vorweg kurze Erklärungen zur IX Query Language in Form von Beispielen:
$CONTENTS ppedv visual basic
-> Suche nach Dokumenten, die jeweils mindestens eines der 3 Wörter enthalten müssen
 
@CONTENTS ppedv visual basic
-> Suche nach Dokumenten, die den festen Wortlaut "ppedv visual basic" enthalten
 
$CONTENTS ppedv AND visual AND basic
-> Suche nach Dokumenten, die alle Suchwörter enthalten
NOT #VPath *|(cgi*|,_private*|,images*|,*vti*|)
-> Suche nur in Folders, die nicht "cgi*,_private*..." enthalten
 
@size > 1000
-> Nur Dateien durchsuchen, die Grösser sind als 1000 Bytes
 
@filename = "ppedv.htm"
-> Durchsuche die Datei ppedv.htm
 
#filename = "pped*"
-> Durchsuche alle Dateien, die mit "pped" beginnen
#filename *.|(htm|,html|,shtml|,asp|,aspx|)
-> Durchsuche Dateien, mit den Extensions htm, html, shtml, asp...
TIP! Diese Schreibweise auch für VPath anwenden.
Komplettes Beispiel:
$CONTENTS ppedv AND visual AND basic 
AND NOT #VPath *|(cgi*|,_private*|,images*|,*vti*|)
AND @size > 1000
AND #filename *.|(htm|,html|,shtml|,asp|,aspx|)
 
Beispiel:2. Script-ImplementierungDieses ASP-Script muss an der Stelle des HTML-Kommentars "<!-- Script für Index Server -->" des 1. Teils eingefügt werden.
<%
 'Aktuelle Seite der Suchergebnisse bestimmen if Request.Form("newSearch") <> "" or clng(Request.Form("txtActPos")) = 0 then  vActPage = 1 else  vActPage = clng(Request.Form("txtActPos")) end if        ' Suchbegriff bestimmen (aus Form oder QueryString) if len(Trim(Request.Form("txtSearchKeyword"))) <> 0 then  sKeyword = Trim(Request.Form("txtSearchKeyword")) elseif len(Request.QueryString("SearchKey")) <> 0 then  sKeyword = trim(Request.QueryString("SearchKey")) end if        ' Suchbegriff muss 3 Zeichen betragen if len(sKeyword) >= 3 then        ' Art der Suche Definieren  select case Request.Form("SearchType")   case "exact"    sKeyString = "@CONTENTS " & sKeyword   case "allWords"    aKeyword = split(sKeyword, " ")    for y = 0 to ubound(aKeyword)     sKeyString = sKeyString & aKeyword(y) & " AND "    next    sKeyString = "$CONTENTS " & left(sKeyString,len(sKeyString)-5)   case "profi"    sKeyString = "$CONTENTS " & sKeyword   case else    sKeyString = "$CONTENTS " & sKeyword  end select
      sIXQuery = sKeyString & " "     sIXQuery = sIXQuery & " AND NOT #VPath *|(dwnld*|,cgi*|,_private*|,images*|,*vti*|) "  sIXQuery = sIXQuery & " AND @size > 1000 "     sIXQuery = sIXQuery & " AND NOT #DocTitle = '' "     sIXQuery = sIXQuery & " AND #filename *.|(htm|,html|,shtml|,asp|,aspx|)"                set oQuery = Server.CreateObject("IXSSO.Query")     set oUtil = Server.CreateObject("IXSSO.Util")          with oQuery   .Query = sIXQuery   .Columns = "DocTitle, Filename, VPath, Characterization, Contents, Rank"   .SortBy = "rank[d]" ' Sortieren    .MaxRecords = 200 ' Maximale Anzahl der Suchergebnisse   .Catalog = "web" ' Name des Katalogs  end with
  ' Recordset mit Such-Ergebnisse erstellen     Set rsIX = oQuery.CreateRecordset("nonsequential")     if (not rsIX.EOF) and (not rsIX.BOF) then   ' Mit Hilfe von Absolute Page Seite anzeigen   rsIX.PageSize = 4   rsIX.AbsolutePage = vActPage   for z = 1 to rsIX.PageSize    if i >= vStartPos then     ' nicht anzeigen wenn kein DocTitle oder kein Dateiname vorhanden ist     if len(rsIX("DocTitle")) > 2 or len(rsIX("filename")) > 2 then      Response.Write "<table cellspacing=""3"" cellpadding=""1"" width=""100%"" class=""searchitem"">"      Response.Write "<tr><th>"      if VarType(rsIX("DocTitle")) = 1 or rsIX("DocTitle") = "" then       ' kein Titel verfügbar --> Dann Dateinamen anzeigen:       Response.Write "<a href=""" & rsIX("vpath") & """>" & Server.HTMLEncode(rsIX("filename")) & "</a>"      else         Response.Write "<a href=""" & rsIX("vpath") & """>" & Server.HTMLEncode(rsIX("DocTitle")) & "</a>"      end if      Response.Write "</th></tr>"      ' Beschreibung ausgeben      Response.Write "<tr><td>" & rsIX("Characterization") & "</td></tr>"      Response.Write "</table><br>"     end if    end if    rsIX.MoveNext    i = i + 1    if rsIX.EOF then exit for   next              ' weitere Seiten-Suchergebnisse anzeigen   for l = 1 to rsIX.PageCount    rsIX.AbsolutePage = l    sLinks = sLinks & "<a href='javascript:ViewThis(" & rsIX.AbsolutePage & ");'>" & (rsIX.AbsolutePage*rsIX.PageSize)-(rsIX.PageSize-1) & " -</a>  |  "   next   sLinks = left(sLinks,len(sLinks)-13)  ' Wenn keine Suchergebnisse vorhanden sind...  else   Response.Write "<table cellspacing=""3"" cellpadding=""1"" width=""100%"" class=""searchitem"">"   Response.Write "<tr><th>Für den Suchbegriff """ & sKeyword & """ wurden keine Treffer gefunden</th></tr>"   Response.Write "</table><br>"  end if     rsIX.Close     set rsIX = nothing     set oUtil = nothing     set oQuery = nothing end if %>  |