Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Objektbasierte Index Server Suche

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

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 Suchformular

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="">&nbsp;
<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 Suchcode

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!

Schlußbemerkung

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Arbeiten mit Index Server Catalogs
Index Server Abfragen per Web Service
PDF Dokumente suchbar machen

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.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.