虽然对于信息工作者来说SharePoint 2010开箱即用的搜索界面已经非常直观并易用,但作为超级用户仍然可以创建属于自己的搜索体验。SharePoint Server 2010包括了许多与搜索相关的强大的Web部件,用于支持超级用户定制搜索体验,包括搜索最佳匹配,精简面板,搜索核心结果,相关查询等等。下图为标准的搜索类WebPart。
[点击查看大图]
IT Pros或Developers可以配置内置的搜索Web部件来定制搜索体验。作为开发人员,你也可以扩展这些WebPart,来改变搜索结果页上内置搜索WebPart的行为。只需要在现有基础上进行继承并扩展,无需创建新的WebPart。
此外,我们还可以在定制搜索WebPart时使用查询日志记录,以及随时通过查询对象模型访问搜索服务。
让我们用Visual Studio 2010创建一个新的搜索WebPart。本例中的WebPart继承自CoreResultsWebPart,并从一个自定义的源中显示数据。标准的搜索核心结果WebPart包括一个构造函数和两个方法,我们将在本例中对其进行修改。
第一步是新建一个WebPart类。创建一个新的WebPart项目并继承自CoreResultsWebPart类。覆写CreateChildControls来添加界面所需的任何控件,然后覆写CreateDataSource。这是我们操作查询的入口。在覆写中,我们将创建一个稍后创建的自定义数据源类的实例。
第二步是创建一个新类继承自CoreResultsDatasource类。在CreateDataSource的覆写中,会设置DataSource属性为该类。在CoreResultsDataSource构造器中,创建一个稍后创建的自定义数据源视图类的实例。至此,无需再覆写其他任何内容了。
第三步是创建一个新类继承自CoreResultsDatasourceView类。设置你的CoreResultsDatasource的View属性为该新类。在CoreResultsDatasourceView的构造器中,获取一个引用到CoreResultsDatasource,以便你可以返回到该webpart。然后,设置QueryManager属性以便共享页面中使用的查询管理器。
现在,我们完成了一个从自定义数据源显示数据的WebPart。接下来,我将在其中添加一些定制查询处理。
毫无疑问我们可以在CoreResultsDataSourceView类中修改查询的方方面面。其中首要的是对AddSortOrder的覆写。该类可以提供对SharePointSearchRuntime类的访问,借助此类,可以得到:KeywordQueryObject,Location和RefinementManager。
下面的样例代码在AddSortOrder覆写中添加了排序功能。
其中本例中使用了KeywordQueryObject类。该类提供了访问关键字查询属性的接口,比如:
EnableFQL
|
RowLimit
|
EnableNicknames
|
SearchTerms
|
EnablePhonetic
|
SelectProperties
|
EnableStemming
|
SortList
|
Filter
|
StartRow
|
QueryInfo
|
SummaryLength
|
QueryText
|
TrimDuplicates
|
Refiners
|
. . .
|
为了在我们的webpart中改变排序顺序,首先需要删除默认的排序顺序。然后获取一个该webpart的引用,因为可以从中得到排序字段的属性值。如果页面posbback,则取到用户在当前页中选择的排序字段。否则,使用用户在配置webpart属性时选择的第一个排序字段。最后,将排序字段添加到SortList属性。
为了可以排序,你还需要列出可供排序的字段。 DateTime类型的字段,Numeric类型的字段,以及HasMultipleValues=false,IsInDocProps=true,并且MaxCharactersInPropertyStoreIndex>0的Text类型的字段,都可以用于排序。
你可以通过创建一个自定义webpart属性编辑器来限制用户只能从指定的字段中进行选择。这部分的代码和SharePoint 2007里一样:继承自EditorPart并实现IWebEditable接口。在附带的样例代码中,我们的EditorPart使用标准的LINQ方式访问搜索架构,来查找属性。
排序字段与排序方向选择:
WebPart属性编辑,其中包括可排序字段的选择和附加的一个查询条件:
参考资料
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。