扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源:microsoft 2007年10月31日
关键字: Microsoft 搜索 web SharePoint Office
简介
可以利用 Microsoft Office SharePoint Portal Server 2003 中的强大搜索数据集合,创建端对端的解决方案来执行搜索项数据的收集和查看。SharePoint Portal Server 会自动记录搜索项数据。在本文中,我们会展示如何将这种数据从每天的日志文件合并到 SQL Server 数据库中,并且使其可用于快速检索和分析。我们将详细说明要实现该任务需要执行的下列高级步骤:
1. 创建 SQL 数据库、相关的存储过程和 DTS 软件包,以便将日志文件数据加载到数据库中。
2. 创建 Web 部件以查看并筛选来自 SQL 数据库的搜索数据。
请注意,在 IIS 日志文件中记录并传输到数据库的搜索结果不包括查询的作用域信息(如果适用),也不包括仅属性查询的结果,例如查询由特定人员创建的文档。
注 本文假设您对 SharePoint Portal Server、.NET Framework 技术(例如 ASP.NET)以及 Microsoft Visual C# 编程语言具有非常深入的理解。您应该将本文与 Microsoft SharePoint Products and Technologies 2003 Software Development Kit (SDK) 中的其他参考资料一起使用。
存储数据:创建数据库、相关存储过程和 DTS 软件包
对于中央存储和简单查询,我们建议将搜索项数据信息从 IIS 日志文件加载到 SQL Server 数据库中。要采取三个步骤,如下所示:
1. 创建数据库和表。
2.创建存储过程。
3. 创建数据转换服务 (DTS) 软件包。
步骤 1. 创建数据库和表
使用“企业管理器”或相似的工具,在 SQL Server 计算机上创建数据库,以存储 IIS 日志文件信息、存储过程和 DTS 软件包。
在新的 SQL 数据库中创建以下两个表:
? tblLogItems
? tblSearchTerms
每个表都应该具有以下结构:
[DateData][varchar](255)--注 对于 tblSearchTerms 表中的 [DateData],该字段的类型为 [datetime] (8)。
[TimeData][varchar](255)
[IP][varchar](255)
[Type][varchar](255)
[Page][varchar](255)
[SearchTermData][varchar](255)
[Port][varchar](255)
[UserData][varchar](255)
[IP2][varchar](255)
[Browser][varchar](255)
[HTTPCode][varchar](255)
[Col012][varchar](255)
[Col013][varchar](255)
[Col014][varchar](255)
[Col015][varchar](255)
注 DateData、TimeData、SearchTermData 和 UserData 字段用于 Web 部件查询中。IIS 日志文件中收集的其他信息存储在表中,可以通过修改 Web 部件查询来使用。
步骤 2. 创建存储过程
在本步骤中,创建以下八个存储过程:
? sp_ReturnFileName
? sp_DeleteIDA
? sp_AppendTerms
? sp_UpdateSearchTermData
? sp_GetDateData
? sp_GetUserData
? sp_GetDatabyDate
? sp_GetDatabyUser
存储过程 #1: sp_ReturnFileName
下面的存储过程,由 DTS 软件包使用,它返回前一天的 IIS 日志文件名。可以为 @stPrefix 变量指定不同的本地路径或通用命名约定 (UNC) 值。IIS 日志文件存储在路径 \WINDOWS\system32\LogFiles\W3SVC1\ 中,但可以将这些文件复制到另一个位置以便将来导入到数据库中。
注 您必须更改 @stPrefix 的变量声明,以便准确匹配您为本地路径或 UNC 路径指定的字符串的长度。
CREATEPROCEDUREsp_ReturnFileName
AS
DECLARE@dtRetrieveFiledatetime,
@stPrefixchar(25),
@stSuffixchar(4),
@stTempchar(2),
@stYearchar(2),
@stMonthchar(2),
@stDaychar(2)
SET@dtRetrieveFile=DateAdd(d, -1, GetDate())
--may include UNC or local path in @stPrefix
--change declaration to the number
--of characters in @stPrefix
SET@stPrefix='\\server_name\share\ex'
SET@stSuffix='.log'
--Get two-digit year
SET@stYear=Cast(Right(DatePart(yy,@dtRetrieveFile), 2) Aschar(2))
--Get two-digit month
SET@stTemp=Cast(Datepart(mm,@dtRetrieveFile) Aschar(2))
SELECT@stMonth=
CASELen(@stTemp)
WHEN1THEN'0'+@stTemp
ELSE@stTemp
END
--Get two-digit day
SET@stTemp=Cast(DatePart(dd,@dtRetrieveFile) Aschar(2))
SELECT@stDay=
CASELen(@stTemp)
WHEN1THEN'0'+@stTemp
ELSE@stTemp
END
SELECT@stPrefix+@stYear+@stMonth+@stDay+@stSuffix
GO
存储过程 #2: sp_DeleteIDA
下面的存储过程,用于 DTS 软件包中,它从 tblLogItems 表中删除不相关的项。
CREATEPROCEDUREsp_DeleteIDA
AS
DELETEtblLogItems WHERESearchTermData ='/default.ida'OrSearchTermData Like'%root.exe'
GO
存储过程 #3: sp_AppendTerms
下面的存储过程用于 DTS 软件包中,它将包含搜索项目的记录从 tblLogItems 表添加到 tblSearchTerms 表中。DateData 字段从 IIS 日志文件格式 (yyyy-mm-dd) 转换为 USA 格式 (mm/dd/yyyy),以适应显示目的以及在 Web 部件代码中更简便的进行查询。
CREATEPROCEDUREdbo.sp_AppendTerms
ASINSERTINTOdbo.tblSearchTerms
(DateData, TimeData, IP, Page, SearchTermData,
Port, UserData, IP2, Browser, HTTPCode, Col012,
Col013, Type)
SELECTCAST(DateData ASDateTime), TimeData, IP, Page, SearchTermData,
Port, UserData, IP2, Browser, HTTPCode, Col012, Col013, Type
FROMdbo.tblLogItems
WHERE(Type LIKE'POST') AND(NOT(UserData LIKE'-')) AND(NOT(SearchTermData LIKE'-'))
GO
存储过程 #4: sp_UpdateSearchTermData
下面的存储过程用于 DTS 软件包中,它清除最近添加到 tblSearchTerms 表中的搜索项。
CREATEPROCEDUREdbo.sp_UpdateSearchTermData
ASUPDATEdbo.tblSearchTerms
SETSearchTermData =REPLACE(SUBSTRING(SearchTermData, 64,
PATINDEX('%+Search+Server+Name%', SearchTermData) -64), '+', '')
WHERE(PATINDEX('%+Search+Server+Name%', SearchTermData) >0)
GO
存储过程 #5: sp_GetDateData
下面的存储过程由 Web 部件使用,它从 tblSearchTerms 表中检索日期的列表。
CREATEPROCEDUREdbo.sp_GetDateData
ASSELECTDISTINCTDateData
FROMdbo.tblSearchTerms
GROUPBYDateData
GO
存储过程 #6: sp_GetUserData
下面的存储过程由 Web 部件使用,它从 tblSearchTerms 表中检索不同用户的列表。
CREATEPROCEDUREdbo.sp_GetUserData
ASSELECTDISTINCTUserData
FROMdbo.tblSearchTerms
GROUPBYUserData
GO
存储过程 #7: sp_GetDatabyDate
下面的存储过程由 Web 部件使用,它用于从 tblSearchTerms 表中检索特定日期或日期范围的搜索项。
CREATEPROCEDUREdbo.sp_GetDatabyDate(@StartDateDATETIME,
@EndDateDATETIME)
ASSELECTSearchTermData, DateData, COUNT(SearchTermData) ASstrCount
FROMdbo.tblSearchTerms
WHERE(DateData >=@StartDate) AND(DateData <=@EndDate)
GROUPBYSearchTermData, DateData
GO
存储过程 #8: sp_GetDatabyUser
下面的存储过程由 Web 部件使用,它用于从 tblSearchTerms 表中检索特定用户的搜索项。
CREATEPROCEDUREdbo.sp_GetDatabyUser
(@UserNameVARCHAR(255))
ASSELECTSearchTermData, DateData, COUNT(SearchTermData) ASstrCount
FROMdbo.tblSearchTerms
WHERE(UserData =@UserName)
GROUPBYSearchTermData, DateData
GO
步骤 3. 创建 DTS 软件包
数据转换服务 (DTS) 软件包是使用 SQL Server Enterprise Manager 中的 DTS 设计器创建的。要创建一个软件包,请右键单击 SQL Server 实例下的 Data Transformation Services 文件夹,然后选择 New Package。
要创建 DTS 软件包,请执行以下七个步骤:
? 创建连接。
? 创建动态属性任务。
? 创建执行 SQL 任务。
? 创建连接间的工作流。
? 创建工作流的其余部分。
? 重置动态属性任务。
? 保存 DTS 软件包并安排其每天运行一次。
创建连接
1. 插入新的 Text File (Source) 连接。
2. 在 File Name 框中,浏览到现有 IIS 日志文件或键入到该文件的路径。
3. 在“Text File Properties”向导的 Select File Format 步骤中,单击 Delimited,然后单击 Next。
4. 在 Specify Column Delimiter 中,单击 Other,然后键入一个空格。现在,您应该看到在 Preview 框中的 IIS 日志文件项。
5. 单击 Finish,然后单击 OK。
6.键入新的 Microsoft OLE DB Provider for SQL Server 连接。
7. 根据您的环境,选择 Server 和 Database,然后单击 OK。
创建动态属性任务
1. 键入新的动态属性任务。
2.命名任务 ReturnFileName,然后在 Dynamic Properties Task Properties 中,单击 Add。
3.在 Dynamic Properties Task: Package Properties 对话框中,选择 Text File (Source) 连接。
4.选择 DataSource 属性,然后单击 Set。
5.在 Add/Edit Assignment 对话框中,对于 Source,选择 Query。
6.对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
7.在 Query 框中,键入 execute sp_ReturnFileName。
8.单击 Refresh,然后确认 Preview 框包含存储过程 sp_ReturnFileName 的结果。
9.单击 OK,然后再次单击 OK。
创建执行 SQL 任务
? 插入新的执行 SQL 任务。
? 命名新任务 DeleteIDA,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
? 在 SQL statement 框中,键入 execute sp_DeleteIDA。
? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。
? 插入新的执行 SQL 任务。
? 命名新任务 AppendTerms,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
? 在 SQL statement 框中,键入 execute sp_AppendTerms。
? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。
? 插入新的执行 SQL 任务。
? 命名新任务 UpdateSearchTermData,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
? 在 SQL statement 框中,键入 execute sp_UpdateSearchTermData。
? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。
创建连接间的工作流
1. 选择 Text File (Source) 连接。
2.按下 Ctrl 键并保持不放,然后选择 Microsoft OLE DB Provider for SQL Server。
3.右键单击 Transform Data Task 以选择它,然后双击从 Text File (Source) 连接指向 Microsoft OLE DB Provider for SQL Server 连接的箭头。
4.在 Source 选项卡上,命名任务 Copy Log。
5.在 Destination 选项卡上,选择 tblLogItems 表。
6.在 Transformations 选项卡上,确认存在箭头(如果没有,按照前后顺序,将文本文件中的字段映射到表中),然后单击 OK。
创建工作流的其余部分
1. 选择 ReturnFileName 任务。
2. 按下 Ctrl 键并保持不放,然后选择 Text File (Source) 连接。
3. 在 Workflow 菜单上,单击 On Success。
4. 选择 Microsoft OLE DB Provider for SQL Server 连接。
5.按下 Ctrl 键并保持不放,然后选择 DeleteIDA 任务。
6.在 Workflow 菜单上,选择 On Success。
7.选择 DeleteIDA 任务。
8.按下 Ctrl 键并保持不放,然后选择 AppendTerms 任务。
9.在 Workflow 菜单上,单击 On Success。
10.选择 AppendTerms 任务。
11.按下 Ctrl 键并保持不放,然后选择 UpdateSearchTermData 任务。
12.在 Workflow 菜单上,单击 On Success。
重置动态属性任务
1. 右键单击 ReturnFileName 任务,选择 Properties,然后单击 Edit。
2.对于 Text File (Source) 连接,突出显示 DataSource,然后单击 Set。
3.单击 Refresh。
4.单击 OK,然后再次单击 OK。
保存 DTS 软件包并安排其每天运行一次
1. 在 Package 菜单上,单击 Save As,然后保存带有描述性名称的 DTS 软件包。
2.关闭 DTS 软件包设计器。
3.在 Data Transformation Services 文件夹中,右键单击该 DTS 软件包,然后选择 Schedule Package。
4.在 Edit Recurring Job Schedule 对话框中,选择 Daily,然后将频率设置为每天进行一次,即某个服务器不忙的时间。
注 DTS 软件包导入前一天的 IIS 日志文件。
创建 Web 部件来显示搜索数据
在将必要的数据存储在 SQL 表并且 DTS 软件包至少执行一次后,您可以使用 Web 部件来查询数据,可以筛选数据并显示在 SharePoint Portal Server 计算机上执行的搜索摘要。现在,我们研究一下如何创建一个允许您以下面三种方式来查看数据的用户界面:
? 某个日期范围内的数据。
? 某个日期的数据。
? 某个用户的数据。
注 不需要创建自定义的 Web 部件,您可以使用 SharePoint 数据视图 Web 部件,并且可以在 Microsoft Office FrontPage 2003 中对它进行配置以查看 SQL 表中的数据。有关数据视图 Web 部件的详细信息,请参阅 Microsoft Office FrontPage 2003 帮助。
创建基本的 Web 部件
开始创建 Web 部件来显示搜索数据。该过程并未在本文中进行阐述,但是您可以按照 MSDN 文章 Creating a Basic Web Part 中的步骤完成。要获得该过程的快速入门,可以下载 Web Part Templates for Visual Studio .NET (WebPartTemplatesforVSNetSample2.exe)。完成后,可以添加一个对 System.Data.dll 的引用。
修改默认代码文件以添加演示代码
可以对基本 Web 部件的默认代码进行基本的添加和修改,以允许它显示 tblSearchTerms 表中的数据,通过下列操作完成上述任务:
? 添加命名空间指令。
? 定义类级别的变量。
? 定义子控件。
? 编写单击事件的代码以获得基于用户选择的搜索统计。
? 修改 RenderWebPart 方法。
添加命名空间指令
1. 在 Visual Studio .NET 中,打开解决方案资源管理器,然后双击 WebPart1.cs。
2. 在代码的顶端附近,将以下命名空间指令添加到 Web 部件。
3.using Microsoft.SharePoint.Utilities;
4.using Microsoft.SharePoint.WebPartPages;
5.using Microsoft.SharePoint.WebControls;
6.using System.Web.UI.HtmlControls;
7.using System.Data;
8.using System.Data.OleDb;
9.using System.Data.SqlClient;
在定义类级别的变量后,替换 Server_Name 和 Database_Name 以反映您的环境。请使用以下代码:
定义子控件
使用 HTML 子控件来提供用户界面。定义四个 HtmlSelect 控件来显示用户的三个选择,以便获得如下搜索统计数据:
? 数据范围(每天完成搜索的数量)。
? 当天数据(当天搜索的内容以及搜索的次数)。
? 用户数据(用户搜索的内容以及用户搜索的次数)。
还可以定义一个 HtmlTextArea 控件来显示结果,并定义三个 HtmlButton 控件来执行前面三个选择中每个的代码。将以下代码行添加到 CreateChildControls。
编写 HtmlButton 控件的单击事件代码
在每个单击事件中,使用 SqlConnection 来打开到包含 tblSearchTerms 表的数据库的连接,并据此运行各自的查询。在找回数据后,将其传递到显示结果的 Web 部件上的 HtmlTextArea 控件。
在 CreateChildControls 部分后添加以下代码:
修改 RenderWebPart 方法
最后,您需要修改 RenderWebPart 方法中的代码,以在 Web 部件中呈现子控件。在 RenderWebPart 中添加以下代码。
关于日期的注释
SQL 存储过程和 Web 部件代码假设您从一个时区中的一台 SharePoint Portal Server 计算机中累积数据。可以修改存储过程和 Web 部件代码以包括时间信息,但是时区信息会根据 Web 部件当前运行的 SharePoint Portal Server 配置进行调整,而不是根据所执行的每个单独搜索的时区信息。
在浏览器中显示和检索日期信息时,会分别使用 SPUtility 类的 FormatDate 和 ParseDate 方法。Web 部件代码和 SQL Server 计算机之间的日期操作是使用 .NET System.DateTime 对象进行处理的。
SPUtility 类的 FormatDate 方法会将日期的时区调整为本地 SharePoint Portal Server 计算机的时区,并且会设置日期的格式,以便它可以显示在 SharePoint Portal Server 计算机的本地日历中。示例代码并没有考虑搜索发生的时间。此外,时间“12:00:00”会传递到 ParseDate 方法,以确保从 Web 部件检索并且随后用于存储过程的日期没有跨天进行调整。
小结
在 SQL Server 数据库中累积 Microsoft Office SharePoint Portal Server 2003 搜索项数据,然后使用自定义的 Web 部件查询并显示信息是一种非常强大的方法,该方法可以查看包含在每天 IIS 日志文件中的数据。SharePoint Portal Server 会自动记录搜索项数据。但是,通过将这种数据从每天的日志文件合并到 SQL Server 数据库,可以使数据用于快速检索和分析。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者