Objektbasierte Index Server Suche
Geschrieben von: Christoph Wille 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. Unser SuchformularNatü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. Der SuchcodeFü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! SchlußbemerkungDie Funktion CreateRecordset liefert ein richtiges Recordset - man kann also ohne weiteres auch Paging einbauen, wie man es bereits aus den "normalen" Datenbankszenarien gewohnt ist. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Arbeiten mit Index Server Catalogs Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |