windows-nt/Source/XPSP1/NT/inetsrv/query/web/html/issample/advquery.asp
2020-09-26 16:20:57 +08:00

580 lines
19 KiB
Plaintext

<%@ LANGUAGE = VBScript %>
<% ' Option Explicit %>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN" "html.dtd">
<HTML>
<HEAD>
<TITLE>Advanced Indexing Service Search Form</TITLE>
<LINK REL=STYLESHEET HREF="is2style.css" TYPE="text/css">
<META NAME="DESCRIPTION" CONTENT="Sample query form for Indexing Service">
<META NAME="AUTHOR" CONTENT="Indexing Service Team">
<META NAME="KEYWORDS" CONTENT="query, content, hit">
<META NAME="SUBJECT" CONTENT="sample form">
<META NAME="MS.CATEGORY" CONTENT="Internet">
<META NAME="MS.LOCALE" CONTENT="EN-US">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1252">
<%
' Customization variables
DebugFlag = FALSE ' set TRUE for debugging
UseSessions = FALSE ' set FALSE to disable use of session variables
RecordsPerPage = 10 ' number of results on a page
MaxResults = -1 ' total number of results returned
FormLogo = "is2logo.gif" ' picture at top of page
' Hard-code some parameters that could be taken from the form
' SortBy = "rank[d]" ' sort order
Scope = "/" ' query scope
' Set initial conditions
NewQuery = FALSE
UseSavedQuery = FALSE
SearchString = ""
QueryForm = Request.ServerVariables("PATH_INFO")
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
SearchString = Request.Form("SearchString")
DocAuthorRestriction = Request.Form("DocAuthorRestriction")
FSRest = Request.Form("FSRest")
FSRestVal = Request.Form("FSRestVal")
FSRestOther = Request.Form("FSRestOther")
FMMod = Request.Form("FMMod")
FMModDate = Request.Form("FMModDate")
SortBy = Request.Form("SortBy")
' Scope = Request.Form("Scope")
RankBase = Request.Form("RankBase")
' NOTE: this will be true only if the button is actually pushed.
if Request.Form("Action") = "Execute" then
NewQuery = TRUE
NextPageNumber = -1
elseif Request.Form("pg") <> "" then
NextPageNumber = Request.Form("pg")
UseSavedQuery = UseSessions
NewQuery = not UseSessions
end if
end if
%>
</HEAD>
<BODY background="is2bkgnd.gif" OnLoad="SetAll()" LANGUAGE=JavaScript>
<TABLE>
<TR><TD><A HREF="http://www.microsoft.com/ntserver/search" target="_top">
<IMG SRC ="<%=FormLogo%>" border=0 VALIGN=MIDDLE ALIGN="LEFT"></a></TD></TR>
<TR><TD ALIGN="RIGHT"><H3>Advanced ASP Sample</H3></TD></TR>
</TABLE>
<SCRIPT LANGUAGE=JavaScript>
<!--
function SetAll()
{
document.QForm.SearchString.value = "<%=SearchString%>";
<%select case FSRest%>
<%case " > "%>
document.QForm.FSRest.selectedIndex = 1;
<%case else%>
document.QForm.FSRest.selectedIndex = 0;
<%end select%>
<%select case FSRestVal%>
<%case "any"%>
document.QForm.FSRestVal.selectedIndex = 0;
<%case "100"%>
document.QForm.FSRestVal.selectedIndex = 1;
<%case "1024"%>
document.QForm.FSRestVal.selectedIndex = 2;
<%case "10240"%>
document.QForm.FSRestVal.selectedIndex = 3;
<%case "102400"%>
document.QForm.FSRestVal.selectedIndex = 4;
<%case "1048576"%>
document.QForm.FSRestVal.selectedIndex = 5;
<%case "10485760"%>
document.QForm.FSRestVal.selectedIndex = 6;
<%case "104857600"%>
document.QForm.FSRestVal.selectedIndex = 7;
<%case "other"%>
document.QForm.FSRestVal.selectedIndex = 8;
<%case else%>
document.QForm.FSRestVal.selectedIndex = 0;
<%end select%>
document.QForm.FSRestOther.value = "<%=FSRestOther%>";
<%select case FMMod%>
<%case "any"%>
document.QForm.FMMod.selectedIndex = 0;
<%case "-10n"%>
document.QForm.FMMod.selectedIndex = 1;
<%case "-1h"%>
document.QForm.FMMod.selectedIndex = 2;
<%case "-1d"%>
document.QForm.FMMod.selectedIndex = 3;
<%case "-1w"%>
document.QForm.FMMod.selectedIndex = 4;
<%case "-1m"%>
document.QForm.FMMod.selectedIndex = 5;
<%case "-1q"%>
document.QForm.FMMod.selectedIndex = 6;
<%case "-1y"%>
document.QForm.FMMod.selectedIndex = 7;
<%case "since"%>
document.QForm.FMMod.selectedIndex = 8;
<%case else%>
document.QForm.FMMod.selectedIndex = 0;
<%end select%>
document.QForm.FMModDate.value = "<%=FMModDate%>";
document.QForm.DocAuthorRestriction.value = "<%=DocAuthorRestriction%>";
document.QForm.SearchString.focus();
}
function msieversion()
{
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE");
if (msie>0)
return parseInt(ua.substring(msie+5, ua.indexOf(".", msie)));
else
return 0;
}
function NAF(szUrl, szQuery)
{
if ( (msieversion() >= 5) && (szQuery.length > 0) )
window.external.NavigateAndFind(szUrl, szQuery, "_main");
else
window.navigate(szUrl, target="_main");
}
//-->
</SCRIPT>
<FORM NAME="QForm" ACTION="<%=QueryForm%>" METHOD=POST>
<!-- -->
<table width=500>
<tr>
<td>Enter your query:</td>
<td><INPUT TYPE="TEXT" NAME="SearchString" SIZE="51" MAXLENGTH="100" VALUE=""></td>
</tr>
<tr>
<td align="right" colspan=2>Document author:
<INPUT TYPE="TEXT" NAME="DocAuthorRestriction" SIZE="27" MAXLENGTH="100" VALUE="">
<td>
</tr>
<tr>
<td align="right" colspan=2>Where File Size is:
<SELECT NAME="FSRest">
<!-- <OPTION VALUE=" &lt; " <%if FSRest = " < " then%>SELECTED <%end if%>>Less Than
<OPTION VALUE=" &gt; " <%if FSRest = " > " then%>SELECTED <%end if%>>Greater Than
-->
<OPTION VALUE=" &lt; " SELECTED>Less Than
<OPTION VALUE=" &gt; " >Greater Than
</SELECT>
<SELECT NAME="FSRestVal">
<OPTION VALUE="any" SELECTED>any size
<OPTION VALUE="100" >100 bytes
<OPTION VALUE="1024" >1K bytes
<OPTION VALUE="10240" >10K bytes
<OPTION VALUE="102400" >100K bytes
<OPTION VALUE="1048576" >1M byte
<OPTION VALUE="10485760" >10M bytes
<OPTION VALUE="104857600" >100M bytes
<OPTION VALUE="other" >Other
</SELECT>
<INPUT TYPE="TEXT" NAME="FSRestOther" SIZE="12" MAXLENGTH="9" VALUE="">
</td>
</tr>
<tr>
<td align="right" colspan=2>Modified:
<SELECT NAME="FMMod">
<OPTION VALUE="any" SELECTED >at any time.
<OPTION VALUE="-10n">in the last 10 minutes.
<OPTION VALUE="-1h">in the last hour.
<OPTION VALUE="-1d">in the last day.
<OPTION VALUE="-1w">in the last week.
<OPTION VALUE="-1m">in the last month.
<OPTION VALUE="-1q">in the last quarter.
<OPTION VALUE="-1y">in the last year.
<OPTION VALUE="since">since GMT (yy/mm/dd) .
</SELECT>
<INPUT TYPE="TEXT" NAME="FMModDate" SIZE="12" MAXLENGTH="9" VALUE="">
</td>
</tr>
<tr>
<td align="right"><A HREF="ixtiphlp.htm">Tips for searching</A></td>
<td align="right">
<BUTTON TYPE=SUBMIT NAME="Action">Execute</BUTTON>
<INPUT TYPE="RESET" NAME="Clear" VALUE="Clear">
</td>
</tr>
</table>
<INPUT TYPE="HIDDEN" NAME="SortBy" VALUE="rank[d]">
<INPUT TYPE="HIDDEN" NAME="Scope" VALUE="/">
<INPUT TYPE="HIDDEN" NAME="ColChoice" VALUE="1">
</FORM>
<BR>
<%if DebugFlag then%>
<PRE>
SearchString = <%=SearchString%>
DocAuthorRestriction = <%=DocAuthorRestriction%>
FSRest = <%=FSRest%>
FSRestVal = <%=FSRestVal%>
FSRestOther = <%=FSRestOther%>
FMMod = <%=FMMod%>
FMModDate = <%=FMModDate%>
SortBy = <%=SortBy%>
Scope = <%=Scope%>
NewQuery = <%=CStr(NewQuery)%>
UseSavedQuery = <%=CStr(UseSavedQuery)%>
</PRE>
<%end if%>
<%
if NewQuery then
if UseSessions then
set Session("Query") = nothing
set Session("Recordset") = nothing
end if
NextRecordNumber = 1
set Q = Server.CreateObject("ixsso.Query")
Composer = ""
TheQuery = ""
if SearchString <> "" then
if Left( SearchSting, 1 ) <> "@" AND Left( SearchString, 1 ) <> "#" AND Left( SearchString, 1 ) <> "$" then
TheQuery = "(@Contents " + SearchString + ")"
else
TheQuery = "(" + SearchString + ")"
end if
Composer = " & "
end if
if FSRestVal <> "any" then
if FSRestVal <> "other" then
TheQuery = "(@Size " + FSRest + FSRestVal + ") " + Composer + TheQuery
else
TheQuery = "(@Size " + FSRest + FSRestOther + ") " + Composer + TheQuery
end if
Composer = " & "
end if
if DocAuthorRestriction <> "" then
TheQuery = "(@DocAuthor " + DocAuthorRestriction + ") " + Composer + TheQuery
Composer = " & "
end if
if FMMod <> "" AND FMMod <> "any" then
if FMMod <> "since" then
TheQuery = "(@Write > " + FMMod + ") " + Composer + TheQuery
else
TheQuery = "(@Write > " + FMModDate + ") " + Composer + TheQuery
end if
end if
if DebugFlag then
Response.Write "TheQuery = " & TheQuery & "<BR>"
end if
Q.Catalog = "web"
Q.Query = TheQuery
Q.SortBy = SortBy
Q.Columns = "DocTitle, vpath, path, filename, size, write, characterization, rank"
if MaxResults <> -1 then
Q.MaxRecords = MaxResults
end if
if Scope <> "\" then
set Util = Server.CreateObject("ixsso.Util")
Util.AddScopeToQuery Q, Scope, "DEEP"
set Util = nothing
end if
set RS = Q.CreateRecordSet("nonsequential")
RS.PageSize = RecordsPerPage
ActiveQuery = TRUE
elseif UseSavedQuery then
if IsObject( Session("Query") ) And IsObject( Session("RecordSet") ) then
set Q = Session("Query")
set RS = Session("RecordSet")
ActiveQuery = TRUE
else
Response.Write "ERROR - No saved query"
end if
end if
if ActiveQuery then
if RS.RecordCount <> -1 and NextPageNumber <> -1 then
RS.AbsolutePage = NextPageNumber
NextRecordNumber = RS.AbsolutePosition
end if
if not RS.EOF then
%>
<p>
<HR WIDTH=80% ALIGN=center SIZE=3>
<p>
<%
LastRecordOnPage = NextRecordNumber + RS.PageSize - 1
CurrentPage = RS.AbsolutePage
if RS.RecordCount <> -1 AND RS.RecordCount < LastRecordOnPage then
LastRecordOnPage = RS.RecordCount
end if
Response.Write "Documents " & NextRecordNumber & " to " & LastRecordOnPage
if RS.RecordCount <> -1 then
Response.Write " of " & RS.RecordCount
end if
if SearchString <> "" then
Response.Write " matching the query " & chr(34) & "<I>"
Response.Write SearchString & "</I>" & chr(34) & ".<P>"
end if
%>
<% if Not RS.EOF and NextRecordNumber <= LastRecordOnPage then%>
<table border=0>
<colgroup width=105>
<%end if%>
<% Do While Not RS.EOF and NextRecordNumber <= LastRecordOnPage
' This is the detail portion for Title, Abstract, URL, Size, and
' Modification Date.
' If there is a title, display it, otherwise display the filename.
%>
<p>
<%
' Graphically indicate rank of document with list of stars (*'s).
if NextRecordNumber = 1 then
RankBase=RS("rank")
end if
if RankBase>1000 then
RankBase=1000
elseif RankBase<1 then
RankBase=1
end if
NormRank = RS("rank")/RankBase
if NormRank > 0.80 then
stars = "rankbtn5.gif"
elseif NormRank > 0.60 then
stars = "rankbtn4.gif"
elseif NormRank > 0.40 then
stars = "rankbtn3.gif"
elseif NormRank >.20 then
stars = "rankbtn2.gif"
else
stars = "rankbtn1.gif"
end if
%>
<tr class="RecordTitle">
<td align="right" valign=top class="RecordTitle">
<%= NextRecordNumber%>.
</td>
<td><b class="RecordTitle">
<%if VarType(RS("DocTitle")) = 1 or RS("DocTitle") = "" then%>
<a href="javascript:NAF('http://<%=Request.ServerVariables("SERVER_NAME")%><%=RS("vpath")%>','<%=SearchString%>')" class="RecordTitle"><%= Server.HTMLEncode( RS("filename") )%></a>
<%else%>
<a href="javascript:NAF('http://<%=Request.ServerVariables("SERVER_NAME")%><%=RS("vpath")%>','<%=SearchString%>')" class="RecordTitle"><%= Server.HTMLEncode(RS("DocTitle"))%></a>
<%end if%>
</b></td>
</tr>
<tr>
<td valign=top align="left">
<IMG SRC="<%=stars%>">
<br>
<%
' Construct the URL for hit highlighting
WebHitsQuery = "CiWebHitsFile=" & Server.URLEncode( RS("vpath") )
WebHitsQuery = WebHitsQuery & "&CiRestriction=" & Server.URLEncode( Q.Query )
WebHitsQuery = WebHitsQuery & "&CiBeginHilite=" & Server.URLEncode( "<b class=""Hit"">" )
WebHitsQuery = WebHitsQuery & "&CiEndHilite=" & Server.URLEncode( "</b>" )
WebHitsQuery = WebHitsQuery & "&CiUserParam3=" & QueryForm
WebHitsQuery = WebHitsQuery & "&CiLocale=" & Q.LocaleID
%>
<a href="qsumrhit.htw?<%= WebHitsQuery %>">
<IMG src="hilight.gif" align="left" alt="Highlight matching terms in document using Summary mode."> Summary</a>
<br>
<a href="qfullhit.htw?<%= WebHitsQuery %>&CiHiliteType=Full">
<IMG src="hilight.gif" align="left" alt="Highlight matching terms in document."> Full</a>
</td>
<td valign=top>
<%if VarType(RS("characterization")) = 8 and RS("characterization") <> "" then%>
<b><i>Abstract: </i></b>
<%= Server.HTMLEncode(RS("characterization"))%>
<%end if%>
<p>
<i class="RecordStats"><a href="javascript:NAF('http://<%=Request.ServerVariables("SERVER_NAME")%><%=RS("vpath")%>','<%=SearchString%>')" class="RecordStats" style="color:blue;">http://<%=Request("server_name")%><%=RS("vpath")%></a>
<br><%if RS("size") = "" then%>(size and time unknown)<%else%>size <%=RS("size")%> bytes - <%=RS("write")%> GMT<%end if%></i>
</td>
</tr>
<tr>
</tr>
<%
RS.MoveNext
NextRecordNumber = NextRecordNumber+1
Loop
%>
</table>
<P><BR>
<%
else ' NOT RS.EOF
if NextRecordNumber = 1 then
Response.Write "No documents matched the query<P>"
else
Response.Write "No more documents in the query<P>"
end if
end if ' NOT RS.EOF
if NOT Q.OutOfDate then
' If the index is current, display the fact %>
<P>
<I><B>The index is up to date.</B></I><BR>
<%end if
if Q.QueryIncomplete then
' If the query was not executed because it needed to enumerate to
' resolve the query instead of using the index, but AllowEnumeration
' was FALSE, let the user know
%>
<P>
<I><B>The query is too expensive to complete.</B></I><BR>
<%end if
if Q.QueryTimedOut then
' If the query took too long to execute (for example, if too much work
' was required to resolve the query), let the user know %>
<P>
<I><B>The query took too long to complete.</B></I><BR>
<%end if%>
<TABLE>
<%
' This is the "previous" button.
' This retrieves the previous page of documents for the query.
SaveQuery = FALSE
if CurrentPage > 1 and RS.RecordCount <> -1 then %>
<td align="left">
<form action="<%=QueryForm%>" method="post">
<INPUT TYPE="HIDDEN" NAME="SearchString" VALUE="<%=SearchString%>">
<INPUT TYPE="HIDDEN" NAME="DocAuthorRestriction" VALUE="<%=DocAuthorRestriction%>">
<INPUT TYPE="HIDDEN" NAME="FSRest" VALUE="<%=FSRest%>">
<INPUT TYPE="HIDDEN" NAME="FSRestVal" VALUE="<%=FSRestVal%>">
<INPUT TYPE="HIDDEN" NAME="FSRestOther" VALUE="<%=FSRestOther%>">
<INPUT TYPE="HIDDEN" NAME="FMMod" VALUE="<%=FMMod%>">
<INPUT TYPE="HIDDEN" NAME="FMModDate" VALUE="<%=FMModDate%>">
<INPUT TYPE="HIDDEN" NAME="SortBy" VALUE="<%=SortBy%>">
<INPUT TYPE="HIDDEN" NAME="Scope" VALUE="<%=Scope%>">
<INPUT TYPE="HIDDEN" NAME="pg" VALUE="<%=CurrentPage-1%>" >
<INPUT TYPE="HIDDEN" NAME="RankBase" VALUE="<%=RankBase%>">
<input type="submit" value="Previous <%=RS.PageSize%> documents">
</form>
</td>
<%SaveQuery = UseSessions%>
<%end if%>
<%if Not RS.EOF then
' This is the "next" button.
' This button retrieves the next page of documents for the query.
%>
<td align="right">
<form action="<%=QueryForm%>" method="post">
<INPUT TYPE="HIDDEN" NAME="SearchString" VALUE="<%=SearchString%>">
<INPUT TYPE="HIDDEN" NAME="DocAuthorRestriction" VALUE="<%=DocAuthorRestriction%>">
<INPUT TYPE="HIDDEN" NAME="FSRest" VALUE="<%=FSRest%>">
<INPUT TYPE="HIDDEN" NAME="FSRestVal" VALUE="<%=FSRestVal%>">
<INPUT TYPE="HIDDEN" NAME="FSRestOther" VALUE="<%=FSRestOther%>">
<INPUT TYPE="HIDDEN" NAME="FMMod" VALUE="<%=FMMod%>">
<INPUT TYPE="HIDDEN" NAME="FMModDate" VALUE="<%=FMModDate%>">
<INPUT TYPE="HIDDEN" NAME="SortBy" VALUE="<%=SortBy%>">
<INPUT TYPE="HIDDEN" NAME="Scope" VALUE="<%=Scope%>">
<INPUT TYPE="HIDDEN" NAME="pg" VALUE="<%=CurrentPage+1%>" >
<INPUT TYPE="HIDDEN" NAME="RankBase" VALUE="<%=RankBase%>">
<%
NextString = "Next "
if RS.RecordCount <> -1 then
NextSet = (RS.RecordCount - NextRecordNumber) + 1
if NextSet > RS.PageSize then
NextSet = RS.PageSize
end if
NextString = NextString & NextSet & " documents"
else
NextString = NextString & " page of documents"
end if
%>
<input type="submit" value="<%=NextString%>">
</form>
</td>
<%SaveQuery = UseSessions%>
<%end if%>
</TABLE>
<% ' Display the page number
if RS.PageCount <> 0 then
Response.Write "Page " & CurrentPage
if RS.PageCount <> -1 then
Response.Write " of " & RS.PageCount
end if
end if
' If either of the previous or back buttons were displayed, save
' the query and the recordset in session variables.
if SaveQuery then
set Session("Query") = Q
set Session("RecordSet") = RS
else
RS.close
Set RS = Nothing
Set Q = Nothing
if UseSessions then
set Session("Query") = Nothing
set Session("RecordSet") = Nothing
end if
end if
end if
%>
<BR>
<!--#include file ="is2foot.inc"-->
</BODY>
</HTML>