Geschrieben von: Christoph Wille
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
Das Abfragen von Index Server Katalogen mit den berühmt-berüchtigten IDQ und HTX Dateien ist nicht unbedingt jedermann's Sache. Im heutigen Artikel stelle ich die Index Server Search Objects (IXSSO) vor, mit denen man bequem von ASP aus die Suche starten, und die Resultate als Recordsets geliefert bekommen kann.
Natürlich benötigen wir ein Formular, in dem der Benutzer seine Suchanfrage eintippen kann. Der Einfachheit halber habe ich nur die Möglichkeit geschaffen, ein Schlüsselwort anzugeben - dies entspricht der einfachen Abfrage, die man auf den meisten Websites findet.
<form method="post" action="<%=Request.ServerVariables("SCRIPT_NAME")%>"> Search 4: <input type="text" name="SearchKeyword" value=""> <input type="submit" value="Suche starten!"> </form>
Das Formular postet auf sich selbst zurück - das heißt, ich habe auch den Suchcode in der gleichen ASP Datei eingebaut.
Für das Suchen bediene ich mich diesmal zweier Objekte - dem IXSSO Query und Util Objekt. Im heute gezeigten Beispiel übernimmt das Query Objekt die meiste Arbeit, in vielen anderen Beispielen kommt Util zu mehr Ehren - zur Auswahl von Scopes. Das machen wir heute über die Abfrage im Query Objekt.
Ich habe versucht, den Code leicht anpassbar zu halten - daher sind am Anfang drei Konstanten definiert, deren wichtigste der Name des Catalogs ist, den man durchsuchen will. Den Namen findet man im Index Server Snap-In heraus (bei IDQ/HTX gibt man den Pfad zum Catalog an!).
<% Const cstrCatalog = "Web" Const cMinKeywordLength = 3 Const cMaxRecords = 50 strKeyword = Trim(Request.Form("SearchKeyword")) If Len(strKeyword) >= cMinKeywordLength Then strIXQuery = "$CONTENTS " & strKeyword strIXQuery = strIXQuery & " AND NOT #VPath = *\includes* " strIXQuery = strIXQuery & " AND NOT #filename login.asp " strIXQuery = strIXQuery & " AND NOT #filename *.|(txt|,inc|,udl|,doc|)" Set objQuery = Server.CreateObject("IXSSO.Query") Set objUtil = Server.CreateObject("IXSSO.Util") objQuery.Query = strIXQuery objQuery.Columns = "Vpath,DocTitle,Filename,Characterization,Contents,Rank" objQuery.SortBy = "Rank[d]" objQuery.MaxRecords = cMaxRecords objquery.Catalog = cstrCatalog objquery.LocaleID = objutil.ISOToLocaleID("EN-US") Set rsIX = objQuery.CreateRecordset("nonsequential") While Not rsIX.EOF Response.Write "<p><a href=""" & rsIX("vpath") & """>" Response.Write rsIX("DocTitle") & "</a><br>" & vbCrlf Response.Write "<i>" & rsIX("Characterization") & "</i></p>" rsIX.MoveNext Wend rsIX.Close Set rsIX = Nothing Set objUtil = Nothing Set objQuery = Nothing End If %>
Im Prinzip haben wir es bei den Eigenschaften des Query Objektes mit alten Bekannten zu tun: den gewünschten Spalten, der Sortierordnung, der Anzahl der Records, dem Namen des Catalogs und der Locale ID. Viel interessanter ist aber der Aufbau des Suchstrings:
strIXQuery = "$CONTENTS " & strKeyword strIXQuery = strIXQuery & " AND NOT #VPath = *\includes* " strIXQuery = strIXQuery & " AND NOT #filename login.asp " strIXQuery = strIXQuery & " AND NOT #filename *.|(txt|,inc|,udl|,doc|)"
Die erste Zeile definiert, wonach wir suchen wollen. Und dann folgt einiges an Information, was wir von Index Server nicht geliefert bekommen wollen: Dateien im Verzeichnis Includes, Dateien mit dem Namen login.asp, sowie alle Dateien mit den gezeigten Dateiendungen. Klarerweise kann man noch weitere Dateien exkludieren, ebenso wie Verzeichnisse oder weitere Dateiendungen.
Hinweis Die gezeigten Befehle für die Abfrage sind nur ein Teil der Syntax, die von Index Server zur Verfügung gestellt wird. Ein Besuch der Hilfe zum Thema IXSSO ist dringend empfohlen!
Führt man die Abfrage aus, bekommt man ein etwas spartanisch formatiertes Ergebnis (siehe Screenshot). Ein wenig optischer Aufputz, und man hat ein perfektes Suchresultat!
Die Funktion CreateRecordset liefert ein richtiges Recordset - man kann also ohne weiteres auch Paging einbauen, wie man es bereits aus den "normalen" Datenbankszenarien gewohnt ist.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010403.zip
Arbeiten mit Index Server Catalogs
http:/www.aspheute.com/artikel/20000524.htm
Index Server Abfragen per Web Service
http:/www.aspheute.com/artikel/20021107.htm
PDF Dokumente suchbar machen
http:/www.aspheute.com/artikel/20010914.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.