|
<% '///////////////////////////////////////////////////////////////////////////////// '// Initialisation ' Declare variables. dim target, firstRow, rowCount ' Get the request parameters. target = Request("target") ' The search request firstRow = Request("fr") ' First row of results to display rowCount = Request("rc") ' Record Count - number of rows to show ' Set default values if none found if firstRow = "" or not IsNumeric(firstRow) Then firstRow = 1 else firstRow = CInt(firstRow) End If if rowCount = "" or not IsNumeric(rowCount) Then rowCount = 10 else rowCount = CInt(rowCount) End If Dim ScriptName, ServerName ScriptName = Request.ServerVariables("SCRIPT_NAME") ServerName = Request.ServerVariables("SERVER_NAME") ' Construct base URL for navigation buttons dim URL URL = ScriptName & "?target=" & Server.URLEncode(target) URL = URL & "&rc=" & Server.URLEncode(rowCount) '///////////////////////////////////////////////////////////////////////////////// '// The search form %> <% DoSearch target '///////////////////////////////////////////////////////////////////////////////// '// Set file types ************************************************************************////////// sub DoSearch(target) on error resume next if target <> "" then dim strQuery ' strQuery = "$contents " & target ' for free text search strQuery = "((#filename *.html) OR " &_ "(#filename *.htm)) AND " &_ "(NOT #vpath *\_vti*) AND (NOT #vpath *\cgi-bin*) AND " &_ "(NOT #vpath *\IISOrigBackup*) AND (NOT #vpath *\scripts*) AND " &_ "(NOT #vpath *\_private*) AND " &_ "(" & target & ")" ' Create the Index Server query object, setting the columns, the sort to ' descending, the max records to 300, and the query string to the given ' target. Note that the query string specifies, with NOT and the ' #vpath operators, that any files in the *\_vti path, should be excluded. ' (_vti* directories contain FrontPage Extension files, and we don't want ' users browsing them.) dim ixQuery ' Index Server query object. set ixQuery = Server.CreateObject("ixsso.Query") if (Err.description <> "") Then Response.Write (" Query object Error: " & Err.description & ". " & vbCRLF) Exit sub end if '// Change Catalog ************************************************************************////////// ixQuery.Columns = "doctitle, vpath, filename, size, write, characterization, rank" ixQuery.SortBy = "rank[d], doctitle" ixQuery.MaxRecords = 300 ixQuery.Query = strQuery ixQuery.Catalog = "D:\Inetpub\VegMDOnline" ' Specify your catalog here if it's not the default /////// ' Create a search utility object to allow us to specify the search type as 'deep', ' meaning it will search recursively down through the directories dim util set util = Server.CreateObject("ixsso.Util") util.AddScopeToQuery ixQuery, Server.MapPath("/"), "deep" if (Err.description <> "") Then Response.Write ("Search Utility Error: " & Err.description & ". " & vbCRLF) Exit sub end if ' Run the query (i.e. create the recordset). dim queryRS ' Query recordset. set queryRS = ixQuery.CreateRecordSet("nonsequential") ' Check the query result. If it timed out or return no records, then show ' an appropriate message. Otherwise, show the hits. if (Err.description <> "") Then Response.Write ("Search Recordset Error: " & Err.description & ". " & vbCRLF) Exit sub Else if queryRS is Nothing Then Response.Write ("Query returned no matches. " & vbCRLF) elseif (ixQuery.QueryTimedOut) then Response.Write ("Error: " & timedOut_Text & ". " & vbCRLF) elseif (queryRS.EOF or queryRS.BOF or queryRS.RecordCount <= 0) then Response.Write ("No matches found. " & vbCRLF) else queryRS.PageSize = rowCount call showHits(queryRS) if (Err.number <> 0) Then Response.Write ("Record Display Error: " & Err.description & ". " & vbCRLF) End If end if End If ' Clean up queryRS.close set queryRS = nothing set ixQuery = nothing set util = nothing End if end Sub ' showHits(): Displays the query hits from the query recordset. ' sub showHits(queryRS) dim recordNumber ' record number dim docTitle ' document title dim endRow ' last row being displayed dim prevRow ' row to display for "prev" option dim nextRow ' row to display for "next" option dim lastRow ' row to display for "last" option dim remainder ' remainder (used to determine if last page is short) dim recordCount ' numner of records returned recordCount = queryRS.RecordCount if firstRow > recordCount Then firstRow = 1 endRow = firstRow + RowCount-1 ' Last row on page to show if endRow > recordCount Then endRow = recordCount prevRow = firstRow - RowCount ' Start of previous page's rows if PrevRow < 1 Then PrevRow = 1 nextRow = endRow + 1 ' Start of next pages rows. May be > CommentCount remainder = recordCount mod RowCount if remainder = 0 Then lastRow = recordCount - RowCount + 1 else lastRow = recordCount - remainder + 1 End If if lastRow < 1 Then lastRow = 1 ' Start of last pages rows ' Go to the top of the record set, then move forward to the record that ' corresponds to the first row. queryRS.MoveFirst() if (firstRow > 1) then queryRS.Move(CInt(firstRow) - 1) end if ' Show the summary info.: # of records found and range showing. %>
Helpful Hints for Searching
Order of precedence are evaluated in the following order:
|
|||||||||||||||||||||||||||||||||