ASP.NET网站全文检索(代码部分)

前文 ASP.NET网站全文检索  主要是收集整理的一些资料,本文是使用Microsoft Indexing Service进行网站全文检索的代码部分,配置部分见这里。 

ASPX页面代码如下:

None.gif < tr >
None.gif    
< td  class ="record"  height ="20" > 关 键 词:
None.gif    
< asp:textbox  id ="txtQuery"  accessKey ="Q"  runat ="server"  Width ="250px"  MaxLength ="50" ></ asp:textbox > &nbsp;
None.gif    
< asp:button  id ="btnSearch"  runat ="server"  Text ="搜索"  EnableViewState ="False" ></ asp:button ></ td >
None.gif
</ tr >
None.gif
< tr >
None.gif    
< td  height ="10" > 查询方式:
None.gif    
< asp:dropdownlist  id ="cboQueryType"  accessKey ="T"  runat ="server"  Width ="250px"  EnableViewState ="False" >
None.gif    
< asp:ListItem  Value ="All"  Selected ="True" > 包含全部的字词 </ asp:ListItem >
None.gif    
< asp:ListItem  Value ="Any" > 包含任何一个字词 </ asp:ListItem >
None.gif    
< asp:ListItem  Value ="Boolean" > 布尔表达式查询 </ asp:ListItem >
None.gif    
< asp:ListItem  Value ="Exact" > 全字匹配 </ asp:ListItem >
None.gif    
< asp:ListItem  Value ="Natural" > 自然语言查询 </ asp:ListItem >
None.gif    
</ asp:dropdownlist >
None.gif    
</ td >
None.gif
</ tr >
None.gif
< tr >
None.gif    
< td  class ="record"  height ="20" > 查询范围:
None.gif    
< asp:dropdownlist  id ="cboDirectory"  accessKey ="D"  runat ="server"  Width ="250px"  EnableViewState ="False" >
None.gif    
< asp:ListItem  Value ="/"  Selected ="True" > 整个网站 </ asp:ListItem >
None.gif    
</ asp:dropdownlist >
None.gif    
</ td >
None.gif
</ tr >
None.gif
< tr >
None.gif    
< td  class ="record"  height ="20" >< asp:label  id ="lblResultCount"  runat ="server"  Font-Italic ="True"  visible ="False"  EnableViewState ="False" ></ asp:label ></ td >
None.gif
</ tr >
None.gif
< tr >
None.gif    
< td  vAlign ="top"  height ="210" >
None.gif    
< asp:datagrid  id ="dgResultsGrid"  runat ="server"  PageSize ="15"  AllowPaging ="True"  AutoGenerateColumns ="False"
None.gif        Visible
="False"  GridLines ="None"  EnableViewState ="False" >
None.gif        
< ItemStyle  HorizontalAlign ="Left"  VerticalAlign ="Top" ></ ItemStyle >
None.gif        
< HeaderStyle  Font-Bold ="True" ></ HeaderStyle >
None.gif        
< Columns >
None.gif            
< asp:TemplateColumn  HeaderText ="排名" >
None.gif                
< HeaderStyle  Width ="40px" ></ HeaderStyle >
None.gif                
< ItemTemplate >
ExpandedBlockStart.gifContractedBlock.gif                    
<% dot.gif # (cint(DataBinder.Eval(Container, "DataSetIndex"))) + 1  %>
None.gif                    
</ ItemTemplate >
None.gif                    
</ asp:TemplateColumn >
None.gif                    
< asp:TemplateColumn  HeaderText ="文档信息" >
None.gif                    
< ItemStyle  HorizontalAlign ="Left"  VerticalAlign ="Top" ></ ItemStyle >
None.gif                    
< ItemTemplate >
None.gif                    
< p >
None.gif                    
< href ='<%#  DataBinder.Eval(Container.DataItem, "VPath")% > ' target="_blank">
ExpandedBlockStart.gifContractedBlock.gif                    
<% dot.gif # GetTitle(Container.DataItem) %>
None.gif                    
</ a >
None.gif                    
< br >
ExpandedBlockStart.gifContractedBlock.gif                    
<% dot.gif # GetCharacterization(Container.DataItem) %>
None.gif                    
< br >
ExpandedBlockStart.gifContractedBlock.gif                    
< i >< href ='<%#  DataBinder.Eval(Container.DataItem, "VPath")% > ' target="_blank">http:// <% dot.gif # Request.ServerVariables("SERVER_NAME") %><% dot.gif # DataBinder.Eval(Container.DataItem, "VPath") %> </ a >
None.gif                    -
ExpandedBlockStart.gifContractedBlock.gif                    
<% dot.gif # GetFileSize(Container.DataItem) %>
None.gif                    k 
</ i >
None.gif                    
</ p >
None.gif                
</ ItemTemplate >
None.gif            
</ asp:TemplateColumn >
None.gif            
</ Columns >
None.gif        
< PagerStyle  Visible ="False" ></ PagerStyle >
None.gif    
</ asp:datagrid >
None.gif    
</ td >
None.gif
</ tr >

后台代码,使用VB.NET书写:

 

None.gif   '  绑定查询结果
ExpandedBlockStart.gifContractedBlock.gif
         Private   Sub BindSearch() Sub BindSearch()
InBlock.gif
InBlock.gif            
Dim dbAdapter As OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter
InBlock.gif            
Dim oleDbSelectCommand1 As OleDbCommand = New System.Data.OleDb.OleDbCommand
InBlock.gif            
Dim dbConnection As OleDbConnection = New System.Data.OleDb.OleDbConnection
InBlock.gif            
Dim ds As DataSet = New DataSet("Results")
InBlock.gif            
Dim rows As Integer = 0
InBlock.gif
InBlock.gif            dbAdapter.SelectCommand 
= oleDbSelectCommand1
InBlock.gif            oleDbSelectCommand1.Connection 
= dbConnection
InBlock.gif            dbConnection.ConnectionString 
= "Provider=MSIDXS.1;Integrated Security .='';Data Source=Web"
InBlock.gif

InBlock.gif
            Try
InBlock.gif                dbAdapter.SelectCommand.CommandText 
= Command
InBlock.gif                
If CStr(ViewState("KEY")) <> "" Then
InBlock.gif                    dbAdapter.Fill(ds)
InBlock.gif                    rows 
= ds.Tables(0).Rows.Count
InBlock.gif                
Else
InBlock.gif                    lblResultCount.Text 
= "请输入关键词进行查询!"
InBlock.gif
                End If
InBlock.gif
InBlock.gif                
If Not ds Is Nothing AndAlso rows > 0 Then
InBlock.gif                    
' 自定义分页,与查询逻辑无关
InBlock.gif
                    ViewState("TOTALROWS"= rows
InBlock.gif                    CalculatePage()
InBlock.gif
InBlock.gif                    dgResultsGrid.AllowPaging 
= True
InBlock.gif                    dgResultsGrid.PageSize 
= CInt(ViewState("PAGESIZE"))
InBlock.gif                    dgResultsGrid.CurrentPageIndex 
= CInt(ViewState("PAGEINDEX")) - 1
InBlock.gif
InBlock.gif                    lblResultCount.ForeColor 
= Color.Black
InBlock.gif                    lblResultCount.Text 
= String.Format("找到 {0} 个相关网页", rows)
InBlock.gif
InBlock.gif                    dgResultsGrid.DataSource 
= ds
InBlock.gif                    dgResultsGrid.DataBind()
InBlock.gif                    dgResultsGrid.Visible 
= (rows > 0)
InBlock.gif                
Else
InBlock.gif                    ViewState(
"TOTALROWS"= 0
InBlock.gif                    CalculatePage()
InBlock.gif                
End If
InBlock.gif
InBlock.gif            
Catch ex As Exception
InBlock.gif                lblResultCount.ForeColor 
= Color.Red
InBlock.gif                lblResultCount.Text 
= String.Format("无法执行特定的查询: {0}", ex.Message)
InBlock.gif                dgResultsGrid.Visible 
= False
InBlock.gif            
Finally
InBlock.gif                lblResultCount.Visible 
= True
InBlock.gif            
End Try
InBlock.gif            ' 自定义分页
InBlock.gif            BindNavigate()
InBlock.gif
ExpandedBlockEnd.gif        
End Sub


 

ExpandedBlockStart.gif ContractedBlock.gif Private   ReadOnly   Property Command() Property Command() As String
InBlock.gif            
Get
InBlock.gif                
Dim query As String
InBlock.gif                query 
= String.Format("SELECT Rank, VPath, DocTitle, Filename, Size, Characterization, Write FROM SCOPE('DEEP TRAVERSAL OF ""{0}""') WHERE  Not CONTAINS(FileName,'""*.txt"" OR ""*.js"" OR ""*.css"" OR ""*.config"" OR ""*.xml""')"CStr(ViewState("DIR")))
InBlock.gif
InBlock.gif                
Dim type As String = CStr(ViewState("TYPE")).ToLower()
InBlock.gif                
Dim fmt As String = " AND (CONTAINS('{0}') OR CONTAINS(DocTitle, '{0}'))"
InBlock.gif
                Dim text As String = CStr(ViewState("KEY")).Replace(";""").Trim
InBlock.gif
InBlock.gif                
If type = "all" Or type = "any" Or type = "boolean" Then
InBlock.gif                    
Dim words() As String = Split(text, " ")
InBlock.gif                    
Dim len As Integer = words.Length
InBlock.gif                    
Dim i As Integer
InBlock.gif
InBlock.gif                    
For i = 0 To len - 1 Step i + 1
InBlock.gif                        
Dim word As String = words(i)
InBlock.gif                        
If type = "boolean" AndAlso (String.Compare(word, "and"True= 0 OrElse String.Compare(word, "or"True= 0 OrElse String.Compare(word, "not"True= 0 OrElse String.Compare(word, "near"True= 0Then
InBlock.gif                        
ElseIf word <> "" Then
InBlock.gif                            words(i) 
= String.Format("""{0}""", word)
InBlock.gif
InBlock.gif                            
If i < len - 1 Then
InBlock.gif                                
If type = "all" Then
InBlock.gif                                    words(i) 
+= " AND"
InBlock.gif
                                ElseIf type = "any" Then
InBlock.gif                                    words(i) 
+= " OR"
InBlock.gif
                                End If
InBlock.gif                            
End If
InBlock.gif                        
End If
InBlock.gif                    
Next
InBlock.gif
InBlock.gif                    query 
+= String.Format(fmt, String.Join(" ", words))
InBlock.gif
InBlock.gif                
ElseIf type = "exact" Then
InBlock.gif                    query 
+= String.Format(fmt, text)
InBlock.gif                
ElseIf type = "natural" Then
InBlock.gif                    query 
+= String.Format(" AND FREETEXT('{0}')", text)
InBlock.gif                
End If
InBlock.gif
InBlock.gif                query 
+= " ORDER BY Rank DESC"
InBlock.gif

InBlock.gif
                Return query
InBlock.gif            
End Get
ExpandedBlockEnd.gif        
End Property

 

None.gif          '  如果网页没有Title,那么使用文件名
ExpandedBlockStart.gifContractedBlock.gif
         Protected   Function GetTitle() Function GetTitle(ByVal value As ObjectAs Object
InBlock.gif            
Dim title As String = Convert.ToString(DataBinder.Eval(value, "DocTitle"))
InBlock.gif
InBlock.gif            
If Not (title Is NothingAnd title.Length > 0 Then
InBlock.gif                
Return title '
InBlock.gif
            Else
InBlock.gif                
Return DataBinder.Eval(value, "Filename")
InBlock.gif            
End If
ExpandedBlockEnd.gif        
End Function
  ' GetTitle
None.gif

None.gif        
'  取摘要
ExpandedBlockStart.gifContractedBlock.gif
         Protected   Function GetCharacterization() Function GetCharacterization(ByVal value As ObjectAs String
InBlock.gif            
Return Server.HtmlEncode(Convert.ToString(DataBinder.Eval(value, "Characterization")))
ExpandedBlockEnd.gif        
End Function

None.gif
None.gif        
'  取文件尺寸,单位KB
ExpandedBlockStart.gifContractedBlock.gif
         Protected   Function GetFileSize() Function GetFileSize(ByVal value As ObjectAs String
InBlock.gif            
Return Convert.ToString(CInt(Convert.ToInt32(DataBinder.Eval(value, "Size")) / 1000))
ExpandedBlockEnd.gif        
End Function


界面外观如下图:

fullsitesearch.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值