1.Microsoft Indexing Service 相关资料 http://blog.csdn.net/zhumkcn/archive/2004/11/08/172171.aspx
2.使用范例1http://www.21cnvip.com/csdn/html/20010829/09/260989.html
配置index server 在执行web服务器上的搜索之前,首先必须创建至少一个索引,并遵循以下步骤完成这项工作。 ⒈启动windows 2000 server服务器上的索引。 缺省情况下选择图标位于管理工具组中的计算机管理。窗口的右边提供关于当前在服务器上 存在的索引信息。默认有两个索引:system和web。 ⒉要创建新的索引,用鼠标右键单击索引服务或右边的面板,选定新建编录。 显示添加编录对话框,指定索引的名称并用浏览按钮选取位置。索引服务不会立即开始索引,此时将弹出一条消息框,单 击确定继续。为了达到最佳的性能,索引服务可以放在和web服务器隔离开的硬盘上。 ⒊指定索引的目录,用右键单击新建的编录名,从弹出选单中选定属性,将出现如图2所示的对话框。 第一个选项卡常规显示刚刚输入的内容,在第二个选项卡跟踪中的www服务器下拉列表中选取你要索引的web网站。 ⒋有了创建的编录,现在可以挑选你想在索引中包括的目录。 这个强大的特性使你能创建几个用不同方式搜索内容的索引。例如,你可能想快速浏览从完整的文本中所引出的章节,这 个特性使你能在index server内执行这项任务。要添加一个目录,用右键单击右边的面板,选定新建目录。在出现的对话 框中通过浏览按钮选择目录并指定别名。如果必须登录到服务器才能得到需要的内容,则可以提供将使用的用户名和密 码,以便得到需要的内容。如果想检查受保护的内容,则更要维护内容的安全性,这一特性非常有用,这样只有被授权的 用户(也许是那些为此付钱的人)才能得到完整的内容。 还可以使用这个工具排除web站点中不想索引的子目录。例如,检索scripts/cgi目录就不会对用户有什么用。为此,只要 双击该目录,将包括在索引中选定为否即可,见图3。 ⒌在已经为站点包括/排除了所有目录后,用右键单击右面板,从弹出选单中选定启动,重新启动index server服务。 服务器将开始浏览已经创建的索引并开始检索内容。 源程序:
1、search.asp
<
html
>
<
head
>
<
title
>
the indexing service
</
title
>
<
style
type
="text/css"
>
...
body {...} { font-family : tahoma,arial,sans-serif ; font-size : 10pt } .heading {...} { font-family : tahoma,arial,sans-serif ; font-size : 14pt ; font-weight : bold } .cite {...} { font-family : tahoma,arial,sans-serif ; font-size : 8pt }
</
style
>
</
head
>
<
body
bgcolor
="#ffffff"
>
<
span
class
="heading"
>
searching the indexing service using ado
</
span
><
hr
>
<!--
-----------------------------------------------------------------------
-->
<
form
name
="frmsearch"
action
="queryindexserver.asp"
method
="post"
>
search for:
<
input
type
="text"
name
="txtsearchfor"
>
<
p
>
<
input
type
="submit"
value
="perform search"
>
<
input
type
="reset"
value
="clear form"
>
</
form
>
</
body
>
</
html
>
2、queryindexserver.asp
<
title
>
the indexing service
</
title
>
<
style
type
="text/css"
>
...
body {...} { font-family : tahoma,arial,sans-serif ; font-size : 10pt } .heading {...} { font-family : tahoma,arial,sans-serif ; font-size : 14pt ; font-weight : bold } .cite {...} { font-family : tahoma,arial,sans-serif ; font-size : 8pt } .document {...} { font-size : 10pt ; font-weight : bold ; background-color : lightgrey ; width : 100% }
</
style
>
</
head
>
<
body
bgcolor
="#ffffff"
>
<
span
class
="heading"
>
results of search for
<
i
>
<%
=
request.form(
"
txtsearchfor
"
)
%>
</
i
>
</
span
><
hr
>
<!--
-----------------------------------------------------------------------
-->
<%
...
dim strsearch set rssearch = server.createobject( " adodb.recordset " ) ' create the connection string strconn = " provider=msidxs; data source=web " ' construct the search string strsearch = " select doctitle, path, filename, characterization, size,write " & _ " from scope() " & _ " where contains (' " & request.form( " txtsearchfor " ) & " ') " ' open the recordset on the search rssearch.open strsearch,strconn ' show what's been searched for while not rssearch.eof response.write " <span class='document'> " & rssearch( " doctitle " ) & " </span><br> " & _ rssearch( " characterization " ) & " <br> " & _ " <a href=' " & rssearch( " path " ) & " '> " & rssearch( " write " ) & " </a> " & _ " ( " & rssearch( " size " ) & " bytes)<p> " rssearch.movenext wend ' tidy up rssearch.close set rssearch = nothing
%>
</
body
>
</
html
>
采用默认的web索引!
3.VC COM使用范例http://sourceoflife.bokee.com/1770263.html
其实实现Indexing Service,主要涉及的就是COM组件在VC中的使用 这里Indexing Service Manage函数在ciodm.dll中,并且查询使用的是数据库查询的模式, 所以需要 #import
"
C:Program FilesCommon FilesSystemadomsado15.dll
"
no_namespace rename(
"
EOF
"
,
"
adoEOF
"
) #import
"
ciodm.dll
"
no_namespace named_guids
if
(S_OK
!=
OleInitialize(NULL))
...
{ AfxMessageBox( " 初始化COM组件库错误 " ); }
/**/
/初始化方法一 /// //
IAdminIndexServerPtr pIIndexAdmin;
//
服务
ICatAdmPtr pICatAdmin;
//
编录
IScopeAdmPtr pIScopeAdmin;
//
目录
HRESULT hr
=
S_OK; DWORD dwError
=
0
; CString strErrorMsg;
//
*****************************************************
//
创建索引服务实例
//
*****************************************************
try
...
{ // 创建索引服务实例 hr = pIIndexAdmin.CreateInstance(__uuidof(AdminIndexServer)); if ( ! SUCCEEDED(hr) ) ... { MessageBox( " 创建索引服务对象失败,请检查是否安装索引服务 " ); return ; } }
catch
(...)
...
{ strErrorMsg.Format( " 创建索引服务对象异常,请检查是否安装索引服务异常错误号为%d " ,GetLastError()); MessageBox(strErrorMsg); return ; }
//
*******************************************************
//
获取编录对象,如果不存在,则添加
//
*******************************************************
try
...
{ pICatAdmin = pIIndexAdmin -> GetCatalogByName( " ThirdIndex " ); // 存在编录,那么看服务是否启动,如果没有启动,启动服务 if ( ! pIIndexAdmin -> IsRunning() ) ... { pIIndexAdmin -> Start(); } // 启动编录 if ( ! pICatAdmin -> IsCatalogRunning() ) ... { pICatAdmin -> StartCatalog(); } }
catch
(_com_error e)
...
{ dwError = LOWORD( e.Error() ); if ( dwError == ERROR_NOT_FOUND ) ... { // 如果不存在编录,那么创建编录 CreateDirectory( " E:/ThirdIndex " ,NULL); CreateDirectory( " E:/ThirdMulu " ,NULL); // 如果服务已经启动,那么先停止服务,创建编录,然后启动服务 if ( pIIndexAdmin -> IsRunning() ) ... { pIIndexAdmin -> Stop(); } // 创建编录 pICatAdmin = pIIndexAdmin -> AddCatalog( " ThirdIndex " , " E:/ThirdIndex " ); // 启动编录 if ( ! pIIndexAdmin -> IsRunning() ) ... { pIIndexAdmin -> Start(); } // 启动编录 if ( ! pICatAdmin -> IsCatalogRunning() ) ... { pICatAdmin -> StartCatalog(); } } else ... { strErrorMsg.Format( " COM错误:获取编录对象异常,错误号为%d " ,dwError); MessageBox(strErrorMsg); } }
catch
(...)
...
{ strErrorMsg.Format( " 获取编录对象异常,错误号为%d " ,GetLastError()); MessageBox(strErrorMsg); return ; }
//
*******************************************************
//
如果目录不存在,那么创建目录
//
*******************************************************
try
...
{ pIScopeAdmin = pICatAdmin -> GetScopeByPath( " E:/ThirdMulu " ); }
catch
(_com_error e)
...
{ dwError = LOWORD( e.Error() ); if ( dwError == ERROR_NOT_FOUND ) ... { pIScopeAdmin = pICatAdmin -> AddScope( " E:/ThirdMulu " ,FALSE); } else ... { strErrorMsg.Format( " COM错误:获取目录对象异常,错误号为%d " ,dwError); MessageBox(strErrorMsg); } }
catch
(...)
...
{ strErrorMsg.Format( " 获取目录对象异常,错误号为%d " ,GetLastError()); MessageBox(strErrorMsg); return ; }
MessageBox(
"
初始化完毕
"
);
/**/
/初始化创建服务实例方法二 //
IUnknown
*
pIUnknown
=
NULL; IAdminIndexServer
*
pIAdminIS
=
NULL; HRESULT hr
=
CoCreateInstance(CLSID_ADMINIS ,NULL ,CLSCTX_INPROC_SERVER,IID_IUnknown , (LPVOID
*
)
&
pIUnknown);
if
(
!
SUCCEEDED(hr) )
...
{ MessageBox( " Error " ); return ; }
//
接口的
hr
=
pIUnknown
->
QueryInterface(IID_IAdminIndexServer ,(
void
**
)
&
pIAdminIS);
if
(
!
SUCCEEDED(hr) )
...
{ MessageBox( " Error1 " ); return ; }
pIUnknown
->
Release(); pIAdminIS
->
AddCatalog(
"
ThirdIndex
"
,
"
E:/ThirdIndex
"
); pIAdminIS
->
Release();
/**/
/添加编录方法二 /// //
//
*******************************************************
//
添加编录,如果存在会提示已经存在
//
*******************************************************
try
...
{ CreateDirectory( " E:/ThirdIndex " ,NULL); CreateDirectory( " E:/ThirdMulu " ,NULL); pICatAdmin = pIIndexAdmin -> AddCatalog( " ThirdIndex " , " E:/ThirdIndex " ); }
catch
(_com_error e)
...
{ dwError = LOWORD( e.Error() ); if ( dwError == ERROR_ALREADY_EXISTS ) ... { MessageBox( " 编录已经存在 " ); pICatAdmin = pIIndexAdmin -> GetCatalogByName( " ThirdIndex " ); } else ... { strErrorMsg.Format( " COM错误:获取编录对象异常,错误号为%d " ,dwError); MessageBox(strErrorMsg); } }