刚写的应用于某软件的全文检索程序

网络整理 - 08-10
<p> <!--#include file=function/conn.asp-->

<br>

<%

keyWord=trim(request("oKey"))

sType=trim(request("oType"))

if keyWord="" or keyWord="关键字…" then

Response.Write "请输入关键字!"

Response.End()

end if

if sType="" then

Response.Write "请选择查询信息类别"

Response.End()

end if

dim ftsTable ''要查询信息的储存表名

dim ftsFolder ''要查询信息的储存文件夹 

if sType="1" then

ftsTable="tb_bzxx"

ftsFolder=fjroot

elseif sType="2" then

ftsTable="tb_other"

ftsFolder=fjroot_other

elseif sType="3" then

ftsTable="tb_info"

ftsFolder=fjroot_info

else

Response.Write "出错了!"

Response.End

end if

sql=""

if sType="1" then

sql="select bz_xuhao as xuhao,bz_name as bname,bz_code as bcode,bz_htm as htm from " & ftsTable

elseif sType="2" then

sql="select p_xuhao as xuhao,p_name as bname,p_code as bcode,p_htm as htm from " & ftsTable

elseif sType="3" then

sql="select info_id as xuhao,info_htm,info_type as htm from " & ftsTable

else

Response.Write "出错了!"

Response.End

end if

Call OPenConn() '' 打开数据库连接

set fso=server.CreateObject("scripting.filesystemobject")

set rs=server.createobject("adodb.recordset")

dim oPattern

oPattern="<p>|<p(.*)>|</p>"

''如果是查询第三种信息(其他信息),则先将所有的信息类别取出来,放到数组中。

dim infoType()

if sType="3" then

rs.Open "select type_id,type_name from tb_info_type order by type_id desc",adocon,3,1

if rs.RecordCount<=0 then

CloseRs rs

Call CloseConn

Response.Write "出错了!"

Response.End()

end if

redim infoType(clng(rs(0)))

do while not rs.EOF

infoType(clng(rs(0)))=rs(1)

rs.MoveNext

loop

rs.Close()

end if

%>

<h4 ALIGN= "CENTER" STYLE= "COLOR:#000080" > 标准信息系统全文检索结果

 关键字: <span style= "color:#ff0000" > <%=KEYWORD%>

</span><br>

</h4>

<hr>

<table width= "600" >

<tr>

<td style= "font-size:12;color:000000;line-height:1.8" > <%

''进行检索

rs.Open sql,adocon,3,1

if rs.RecordCount>0 then

sCount=0

do while not rs.EOF

findPos=0

htm=rs("htm")

if htm<>"" then

vpath=ftsFolder & "/" & rs("xuhao") & "/" & htm

filePath=Server.MapPath(vpath)

if fso.FileExists(filepath) then

set oFile=fso.GetFile(filepath)

set oFilestream=oFile.openastextstream(1)

oFileInfo=""

if not oFilestream.atendofstream then

oFileInfo=FilterHTML(FilterBr(trim(oFilestream.readall)))

if oFileInfo<>"" then

findPos=instr(1,oFileInfo,keyWord,1)

''查到了数据,需要显示

if findPos>0 then

Response.Write "<a href=''" & vpath & "'' target=''_blank''>"

if sType="1" or sType="2" then

Response.Write "<spanfont-weight:bold;font-size:13;color:0000ff''>" & rs("bname") & " ( " & rs("bcode") & " )  </span></a><br>"

else

Response.Write "<spanfont-weight:bold;font-size:13;color:0000ff''''>" & infotype(clng(rs("info_Type"))) & "  </span></a><br>"

end if

if findPos>50 then

Response.Write "…" & replace(mid(oFileInfo,findPos-50,200),keyWord,"<spancolor:ff0000''>" & keyWord & "</span>",1,-1,1) & "…"

else

Response.Write replace(mid(oFileInfo,1,200),keyWord,"<spancolor:ff0000''>" & keyWord & "</span>",1,-1,1)& "…"

end if

Response.Write "<br><br>"

sCount=sCount+1

end if

end if

end if

end if

end if

rs.MoveNext

loop

end if

Response.Write "     <SPANCOLOR:#000080''>共搜索到 " & sCount & " 条信息!</SPAN>"

''过滤掉文本中的html标记和空格

Function FilterHTML(str)

Dim re

Set re=new RegExp

re.IgnoreCase =True

re.Global=True

re.Pattern="<(.[^>]*)>| "

str=re.Replace(str,"")

set re=Nothing

FilterHTML=str

End Function

function FilterBr(str)

FilterBr=replace(str,vbcrlf," ")

FilterBr=replace(str,"<br>"," ")

end function

%>

</td>

</tr>

</table>

</body>

</html>