MOSS Search学习记录(九):高级搜索定制(下)

最后介绍高级搜索定制中最复杂的部分。在高级搜索页面中高级搜索框这个Web部件,有个属性选项卡。其中包含了一个高级搜索页面的XML描述配置文件。默认内容如下,我们一块一块来分析。

1.打开高级搜索页面,点击页面上的“网站操作——编辑页面”,进入到页面的编辑模式。

2.点击高级搜索框WebPart的编辑菜单,选择“修改共享 Web 部件”,打开部件的属性配置窗口。

3.展开第三个配置部分“属性”。可以看到3可配置属性,显示属性、属性部分标签、属性。
    

4.显示属性


这个属性用来控制高级搜索页面中第三部分的显示和隐藏。

例如,将其设置为未选中状态,即不显示“添加属性限制”的部分,效果如下

5.属性部分标签


这个属性用来控制下图中红色部分的文本内容,如果内容为空的话则显示为默认文字“添加属性限制
”。

修改为“添加属性查询条件”,效果如下

6.属性


可以看出,属性的内容是一个
XML描述文件。

默认内容如下:

<rootxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

     <LangDefs>

         <LangDefDisplayName="阿拉伯语"LangID="1"/>

         <LangDefDisplayName="孟加拉语"LangID="69"/>

         <LangDefDisplayName="保加利亚语"LangID="2"/>

         <LangDefDisplayName="加泰罗尼亚语"LangID="3"/>

         <LangDefDisplayName="中文"LangID="4"/>

         <LangDefDisplayName="克罗地亚语/塞尔维亚语"LangID="26"/>

         <LangDefDisplayName="捷克语"LangID="5"/>

         <LangDefDisplayName="丹麦语"LangID="6"/>

         <LangDefDisplayName="荷兰语"LangID="19"/>

         <LangDefDisplayName="芬兰语"LangID="11"/>

         <LangDefDisplayName="法语"LangID="12"/>

         <LangDefDisplayName="德语"LangID="7"/>

         <LangDefDisplayName="希腊语"LangID="8"/>

         <LangDefDisplayName="古吉拉特语"LangID="71"/>

         <LangDefDisplayName="希伯来语"LangID="13"/>

         <LangDefDisplayName="印地语"LangID="57"/>

         <LangDefDisplayName="匈牙利语"LangID="14"/>

         <LangDefDisplayName="冰岛语"LangID="15"/>

         <LangDefDisplayName="印度尼西亚语"LangID="33"/>

         <LangDefDisplayName="意大利语"LangID="16"/>

         <LangDefDisplayName="日语"LangID="17"/>

         <LangDefDisplayName="卡纳达语"LangID="75"/>

         <LangDefDisplayName="朝鲜语"LangID="18"/>

         <LangDefDisplayName="拉脱维亚语"LangID="38"/>

         <LangDefDisplayName="立陶宛语"LangID="39"/>

         <LangDefDisplayName="马来语"LangID="62"/>

         <LangDefDisplayName="马拉雅拉姆语"LangID="76"/>

         <LangDefDisplayName="马拉地语"LangID="78"/>

         <LangDefDisplayName="挪威语"LangID="20"/>

         <LangDefDisplayName="波兰语"LangID="21"/>

         <LangDefDisplayName="葡萄牙语"LangID="22"/>

         <LangDefDisplayName="旁遮普语"LangID="70"/>

         <LangDefDisplayName="罗马尼亚语"LangID="24"/>

         <LangDefDisplayName="俄语"LangID="25"/>

         <LangDefDisplayName="斯洛伐克语"LangID="27"/>

         <LangDefDisplayName="斯洛文尼亚语"LangID="36"/>

         <LangDefDisplayName="西班牙语"LangID="10"/>

         <LangDefDisplayName="瑞典语"LangID="29"/>

         <LangDefDisplayName="泰米尔语"LangID="73"/>

         <LangDefDisplayName="泰卢固语"LangID="74"/>

         <LangDefDisplayName="泰语"LangID="30"/>

         <LangDefDisplayName="土耳其语"LangID="31"/>

         <LangDefDisplayName="乌克兰语"LangID="34"/>

         <LangDefDisplayName="乌尔都语"LangID="32"/>

         <LangDefDisplayName="越南语"LangID="42"/>

     </LangDefs>

     <Languages>

         <LanguageLangRef="4"/>

         <LanguageLangRef="12"/>

         <LanguageLangRef="7"/>

         <LanguageLangRef="17"/>

         <LanguageLangRef="10"/>

     </Languages>

     <PropertyDefs>

         <PropertyDefName="Path"DataType="text"DisplayName="URL"/>

         <PropertyDefName="Size"DataType="integer"DisplayName="大小"/>

         <PropertyDefName="Write"DataType="datetime"DisplayName="上次修改日期"/>

         <PropertyDefName="FileName"DataType="text"DisplayName="名称"/>

         <PropertyDefName="Description"DataType="text"DisplayName="说明"/>

         <PropertyDefName="Title"DataType="text"DisplayName="标题"/>

         <PropertyDefName="Author"DataType="text"DisplayName="作者"/>

         <PropertyDefName="DocSubject"DataType="text"DisplayName="主题"/>

         <PropertyDefName="DocKeywords"DataType="text"DisplayName="关键字"/>

         <PropertyDefName="DocComments"DataType="text"DisplayName="备注"/>

         <PropertyDefName="Manager"DataType="text"DisplayName="经理"/>

         <PropertyDefName="Company"DataType="text"DisplayName="公司"/>

         <PropertyDefName="Created"DataType="datetime"DisplayName="创建日期"/>

         <PropertyDefName="CreatedBy"DataType="text"DisplayName="创建者"/>

         <PropertyDefName="ModifiedBy"DataType="text"DisplayName="上次修改者"/>

     </PropertyDefs>

     <ResultTypes>

         <ResultTypeDisplayName="所有结果"Name="default">

              <Query/>

              <PropertyRefName="Author" />

              <PropertyRefName="Description" />

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

         </ResultType>

         <ResultTypeDisplayName="文档"Name="documents">

              <Query>IsDocument=1</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="Word 文档"Name="worddocuments">

              <Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="Excel 文档"Name="exceldocuments">

              <Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="演示文稿"Name="presentations">

              <Query>FileExtension='ppt'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

     </ResultTypes>

</root>

整体XML描述看起来很长,其实内容不多,很简单,包括如下几大部分。

<LangDefs>可搜索的语言

<Languages>提供选择的语言

<PropertyDefs>添加属性限制中属性字段的定义

<ResultTypes>结果类型定义

<rootxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

     <LangDefs>语言类型定义部分)

         <LangDefDisplayName="阿拉伯语"LangID="1"/>具体语言定义)

         ……

         <LangDefDisplayName="中文"LangID="4"/>

         ……

     </LangDefs>

     <Languages>提供搜索选择语言定义部分)

         <LanguageLangRef="4"/>可选搜索语言定义)

         ……

     </Languages>

     <PropertyDefs>搜索属性限制定义部分)

         ……

         <PropertyDefName="Title"DataType="text"DisplayName="标题"/>属性限制定义)

         ……

     </PropertyDefs>

     <ResultTypes>结果类型定义部分)

         <ResultTypeDisplayName="所有结果"Name="default">具体结果类型定义)

              <Query/>查询条件)

              <PropertyRefName="Author" />此结果类型可查询字段定义)

              <PropertyRefName="Description" />

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

         </ResultType>

         <ResultTypeDisplayName="文档"Name="documents">

              <Query>IsDocument=1</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="Word 文档"Name="worddocuments">

              <Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="Excel 文档"Name="exceldocuments">

              <Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

         <ResultTypeDisplayName="演示文稿"Name="presentations">

              <Query>FileExtension='ppt'</Query>

              <PropertyRefName="Author" />

              <PropertyRefName="DocComments"/>

              <PropertyRefName="Description" />

              <PropertyRefName="DocKeywords"/>

              <PropertyRefName="FileName" />

              <PropertyRefName="Size" />

              <PropertyRefName="DocSubject"/>

              <PropertyRefName="Path" />

              <PropertyRefName="Created" />

              <PropertyRefName="Write" />

              <PropertyRefName="CreatedBy" />

              <PropertyRefName="ModifiedBy" />

              <PropertyRefName="Title"/>

              <PropertyRefName="Manager" />

              <PropertyRefName="Company"/>

         </ResultType>

     </ResultTypes>

</root>

语言类型定义部分

<LangDefs>

定义SharePoint可提供给搜索的语言集合。

具体语言定义

<LangDefDisplayName="中文"LangID="4"/>

LangDef:语言定义

DisplayName:显示名称


LangID
:语言标识号

提供搜索选择语言定义部分

<Languages>

定义语言范围选取器中可选择的语言。

可选搜索语言定义

<LanguageLangRef="4"/>

Language:选择的语言标签

LangRef:选择显示语言的ID号,这个值和中定义的LangID对应

搜索属性限制定义部分

<PropertyDefs>

定义高级搜索中可搜索的字段,这些都是网站栏并在共享服务管理中进行爬网、定义元数据影射出来的字段。步骤如下:

a打开SharePoint管理中心

b点击建立好的共享服务管理网站,进入到共享服务管理网站中。这里名字为SharedServices1

c在共享服务管理页面上找到搜索部分,点击进入“搜索设置”。

d在爬网设置部分可以找到“元数据属性映射”。打开。

e这时可以看到托管属性视图中列出了很多的爬网属性。其中一些就是映射到SharePoint的网站栏的。这样我们现在需要一个网站栏。打开主网站的网站设置页面,在库这类管理下找到网站栏,点击进入

f点击顶部的创建链接,创建一个新的网站栏。

g建立一个多行文本类型的KBContent字段。这里推荐用户将网站栏的名字起为英文名字,如果起为中文的话在爬网找到这个网站栏后会以中文的16进制编码来显示而并不显示中文字,在元数据属性映射的时候用户不方便找到这个网站栏,所以建议用户将网站栏的名字起为英文名字。

h创建完成后,需要在网站中引用此网站栏并填入信息才能将这个网站栏爬网爬到。所以按照如下步骤创建。首先创建两个内容类型软件知识和硬件知识,父内容类型均为列表的项目。对两个内容类型均添加KBContent网站栏的引用。然后创建两个自定义列表:软件知识库和硬件知识库。软件知识库列表添加软件知识内容类型并设置为默认内容类型,硬件知识库添加硬件知识内容类型并设置为默认内容类型。最后在两个列表构建的知识库中输入一些用来查询的信息。


打开刚才的“共享服务管理”的“搜索设置”页面。打开“内容源和爬网计划”。

i对刚才创建的网站栏所在的内容源进行一次完全爬网。

j爬网完成后,返回搜索设置页面。打开“元数据属性映射”页面。点击“新建托管属性”。

k首先设置属性名称为ContentForKB。并设置信息类型为文本。

l在“到已爬网属性的映射”部分点击“添加映射”按钮。在弹出的窗口中找到我们刚才爬网的爬到的网站栏KBContent。这里SharePoint对这种自定义的栏,增加了ows_的前缀。


m最后在“实用范围”上选中“允许此属性在多个范围中使用”。

n这样我们就将列表中的字段映射到了元数据属性中。

属性限制定义

<PropertyDefName="Title"DataType="text"DisplayName="标题"/>

PropertyDef:属性定义

Name:元数据属性名称

DataType:元数据属性类型

DisplayName:显示名称

这里就可以填写上面介绍的映射出来的列表字段的属性。

结果类型定义部分

<ResultTypes>

定义搜索结果显示的结果类型,例如仅搜索Word文档。

具体结果类型定义

<ResultTypeDisplayName="所有结果"Name="default">

<ResultTypeDisplayName="文档"Name="documents">

<ResultTypeDisplayName="文档"Name="documents">

<ResultTypeDisplayName="Excel 文档"Name="exceldocuments">

<ResultTypeDisplayName="演示文稿"Name="presentations">

默认列出了五种结果类型。

ResultType:定义结果类型的标签。

DisplayName:结果类型的显示名称。

Name:结果类型的标识名称,每个结果类型的标识名称要保证唯一,不能重复。

查询条件

<Query/>

<Query>IsDocument=1</Query>

<Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>

<Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>

<Query>FileExtension='ppt'</Query>

当查询所有内容的时候则保持标签内容为空,如果需要查询则编写查询条件放在标签中。

标签中使用的IsDocumentFileExtension都是前面介绍的元数据属性。

例如,我们要查询内容类型为软件知识的内容,则编写为ContentType='软件知识'即可。

此结果类型可查询字段定义

类似,也是元数据属性映射的网站栏。所以如果需要搜索其它类型的字段,则根据前面的步骤进行定义即可。

7.最后是一个定义过的XML描述文件的例子。

<rootxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

     <LangDefs>

         <LangDefDisplayName="中文"LangID="4"/>

     </LangDefs>

     <Languages>

         <LanguageLangRef="4"/>

     </Languages>

     <PropertyDefs>

         <PropertyDefName="Title"DataType="text"DisplayName="标题"/>

         <PropertyDefName="ContentForKB"DataType="text"DisplayName="知识内容"/>

     </PropertyDefs>

     <ResultTypes>

         <ResultTypeDisplayName="所有结果"Name="default">

              <Query/>

              <PropertyRefName="Title" />

              <PropertyRefName="ContentForKB" />

         </ResultType>

         <ResultTypeDisplayName="软件知识"Name="softwarekb">

              <Query>ContentType='软件知识'</Query>

              <PropertyRefName="Title" />

              <PropertyRefName="ContentForKB" />

         </ResultType>

         <ResultTypeDisplayName="硬件知识"Name="hardwarekb">

              <Query>ContentType='硬件知识'</Query>

              <PropertyRefName="Title" />

              <PropertyRefName="ContentForKB" />

         </ResultType>

     </ResultTypes>

</root>

这个例子实现了既可以搜索网站的所有内容,也可以在指定的软件知识或者硬件知识范围内进行搜索。并提供了两个精确的字段搜索,标题和知识内容KBContent字段的搜索。

8.验证配置结果。

第一,搜索所有内容Windows关键字。
    

搜索结果
    

List6是软件知识库列表

List7是硬件知识库列表

可以看出,两个列表均被搜了出来,符合我们的预期。

第二,仅搜索软件知识中的结果。
    

结果如下
    

可以看到确实仅搜到了软件知识库列表Lilst6中的Windows信息。硬件知识库列表List7中的Windows并没有显示在搜索结果中。

第三,搜索硬件知识库中的信息。
    
    

同上,搜索结果中仅列出了硬件知识库List7列表中的相关信息。

第四,在两个列表中各增加一条信息,如下。
    
    

这样,在软件知识库中搜索KBContent字段包含JAVA应该就不会搜出第一条记录。在硬件知识库中搜索标题字段包含NET则不会搜索出第一条记录。因为增加了信息内容,需要对网站进行一次增量爬网才能被搜索到。

第五,软件知识库中搜索KBContent字段包含JAVA关键字的信息。
    

结果如下


    可以看到确实只搜出了后两条记录,第一条记录被排除在外。

第六,搜索硬件知识库List7列表中标题字段包含NET的信息。


    结果如下
    

结果同样,只搜索出了后两条记录,第一条记录由于不符合我们定制的查询条件而被排除在外。

posted @ 2008-07-17 10:04  Jun's  阅读(183)  评论(0)    收藏  举报