MOSS Search学习记录(九):高级搜索定制(下)
2008-01-12 22:47 努力学习的小熊 阅读(3617) 评论(4) 编辑 收藏 举报MOSS Search学习记录(九):高级搜索定制(下)
最后介绍高级搜索定制中最复杂的部分。在高级搜索页面中高级搜索框这个Web部件,有个属性选项卡。其中包含了一个高级搜索页面的XML描述配置文件。默认内容如下,我们一块一块来分析。
1.打开高级搜索页面,点击页面上的“网站操作——编辑页面”,进入到页面的编辑模式。
2.点击高级搜索框WebPart的编辑菜单,选择“修改共享 Web 部件”,打开部件的属性配置窗口。
3.展开第三个配置部分“属性”。可以看到3可配置属性,显示属性、属性部分标签、属性。
4.显示属性
|
例如,将其设置为未选中状态,即不显示“添加属性限制”的部分,效果如下
|
5.属性部分标签
|
修改为“添加属性查询条件”,效果如下
|
6.属性
默认内容如下:
|
|
整体XML描述看起来很长,其实内容不多,很简单,包括如下几大部分。 <LangDefs>可搜索的语言 <Languages>提供选择的语言 <PropertyDefs>添加属性限制中属性字段的定义 <ResultTypes>结果类型定义
|
|
①语言类型定义部分 <LangDefs> 定义SharePoint可提供给搜索的语言集合。 |
|
②具体语言定义 <LangDef DisplayName="中文" LangID="4"/> LangDef:语言定义 DisplayName:显示名称
|
|
③提供搜索选择语言定义部分 <Languages> 定义语言范围选取器中可选择的语言。 |
|
④可选搜索语言定义 <Language LangRef="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这样我们就将列表中的字段映射到了元数据属性中。 |
|
⑥属性限制定义 <PropertyDef Name="Title" DataType="text" DisplayName="标题"/> PropertyDef:属性定义 Name:元数据属性名称 DataType:元数据属性类型 DisplayName:显示名称 这里就可以填写上面介绍的映射出来的列表字段的属性。 |
|
⑦结果类型定义部分 <ResultTypes> 定义搜索结果显示的结果类型,例如仅搜索Word文档。 |
|
⑧具体结果类型定义 <ResultType DisplayName="所有结果" Name="default"> <ResultType DisplayName="文档" Name="documents"> <ResultType DisplayName="文档" Name="documents"> <ResultType DisplayName="Excel 文档" Name="exceldocuments"> <ResultType DisplayName="演示文稿" 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> 当查询所有内容的时候则保持标签内容为空,如果需要查询则编写查询条件放在标签中。 标签中使用的IsDocument和FileExtension都是前面介绍的元数据属性。 例如,我们要查询内容类型为软件知识的内容,则编写为ContentType='软件知识'即可。 |
|
⑩此结果类型可查询字段定义 和⑥类似,也是元数据属性映射的网站栏。所以如果需要搜索其它类型的字段,则根据前面的步骤进行定义即可。 |
7.最后是一个定义过的XML描述文件的例子。
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <LangDefs> <LangDef DisplayName="中文" LangID="4"/> </LangDefs> <Languages> <Language LangRef="4"/> </Languages> <PropertyDefs> <PropertyDef Name="Title" DataType="text" DisplayName="标题"/> <PropertyDef Name="ContentForKB" DataType="text" DisplayName="知识内容"/> </PropertyDefs> <ResultTypes> <ResultType DisplayName="所有结果" Name="default"> <Query/> <PropertyRef Name="Title" /> <PropertyRef Name="ContentForKB" /> </ResultType> <ResultType DisplayName="软件知识" Name="softwarekb"> <Query>ContentType='软件知识'</Query> <PropertyRef Name="Title" /> <PropertyRef Name="ContentForKB" /> </ResultType> <ResultType DisplayName="硬件知识" Name="hardwarekb"> <Query>ContentType='硬件知识'</Query> <PropertyRef Name="Title" /> <PropertyRef Name="ContentForKB" /> </ResultType> </ResultTypes> </root> |
这个例子实现了既可以搜索网站的所有内容,也可以在指定的软件知识或者硬件知识范围内进行搜索。并提供了两个精确的字段搜索,标题和知识内容KBContent字段的搜索。
8.验证配置结果。
第一,搜索所有内容Windows关键字。
搜索结果
List6是软件知识库列表
List7是硬件知识库列表
可以看出,两个列表均被搜了出来,符合我们的预期。
第二,仅搜索软件知识中的结果。
结果如下
可以看到确实仅搜到了软件知识库列表Lilst6中的Windows信息。硬件知识库列表List7中的Windows并没有显示在搜索结果中。
第三,搜索硬件知识库中的信息。
同上,搜索结果中仅列出了硬件知识库List7列表中的相关信息。
第四,在两个列表中各增加一条信息,如下。
这样,在软件知识库中搜索KBContent字段包含JAVA应该就不会搜出第一条记录。在硬件知识库中搜索标题字段包含NET则不会搜索出第一条记录。因为增加了信息内容,需要对网站进行一次增量爬网才能被搜索到。
第五,软件知识库中搜索KBContent字段包含JAVA关键字的信息。
结果如下
可以看到确实只搜出了后两条记录,第一条记录被排除在外。
第六,搜索硬件知识库List7列表中标题字段包含NET的信息。
结果如下
结果同样,只搜索出了后两条记录,第一条记录由于不符合我们定制的查询条件而被排除在外。