SharePoint 2013 开发——搜索架构及扩展
来源:互联网 发布:adobe软件 mac百度云 编辑:程序博客网 时间:2024/06/10 04:49
SharePoint 2013高度整合了搜索引擎,在一个场中只有一个搜索服务应用程序(SSA)。它集成了FAST,只有一个代码库,不同的授权层次启用不同的搜索功能,但是有些功能在云端是不可用的。
下图从开发者的视角展示了搜索架构,摘选自SharePoint高级编程。
图中标记灰色的部分就是我们在开发过程中可以应用或扩展的部分。我们可以通过REST或CSOM API来对查询模块进行定义和扩展;通过BCS来创建新的索引连接;借助内容扩充Web服务(CEWS)API来扩展内容处理模块。
下面我们具体来看一下搜索中可扩展的点。
界面UI:
●Web部件,主要体现在内容搜索Web部件
●结果展示模板
●导航设置
查询:
●查询语法(KQL和FQL)
●查询APIs(REST和CSOM)
●查询规则
内容和元数据:
●搜索架构
●结果源
●业务数据连接(BCS)
●内容处理(CEWS)
相关性和语言学:
●排名属性
●权限
●术语集和字典
●语言学(如分词算法)
●分析
而我们常接触到的开发场景并不是以上全部,一般常做的开发场景有如下几个:
●修改终端用户体验,展示特定的信息;
●为特定的产业、部门,甚至是话题和角色创建新的垂直搜索应用程序;
●创建一个新的可视化元素添加到标准的搜索中;
●修改查询和索引
●创建新的搜索驱动的网站和应用程序
SharePoint 2013的搜索相关的内容个人认为是比较高深的,需要花费大量的时间好好钻研。
本篇的最后我们来一起学习一下如何使用Content Enrichment Web Service,参考一位外国友人的例子。
通过CEWS我们可以扩展SharePoint 2013的搜索功能,将托管属性的值发送到外部的Web服务并返回新的或经过修改的托管属性。这个过程包括实现一个自定义的WCF服务并使用PowerShell注册它,通过PowerShell命令来指定哪些属性进出该WCF服务。
本例中将采用Author和LastModifiedTime这两个托管属性,然后编写一个新的字符串如“Modified by <author> on <LastModifiedTime>.”到托管属性TestProperty。
首先创建这个托管属性TestProperty,类型为Text,属性有Query、SSearch、Retrieve和Refine。进入到SharePoint的网站设置页面,单击网站集管理->搜索架构,单击新建托管属性,填写名称为TestProperty,勾选查询、搜索、检索和优化,单击确定按钮完成创建,如下图所示。
接下来打开Visual Studio 2013,创建一个WCF应用程序项目叫做ContentEnrichmentExampleService
随项目默认创建的Service1.svc和IService1.cs没有什么用,我们直接删除之。向项目中添加引用,浏览,导航到目录C:\Program Files\Microsoft Office Servers\15.0\Search\Applications\External,添加microsoft.office.server.search.contentprocessingenrichment.dll。
下面我们需要创建一个服务来做内容扩充处理这件事,向项目中添加一个新建项WCF服务,取名做ContentEnrichmentExampleService.svc。本例中不需要IContentEnrichmentExampleService.cs,故将它删除掉。现在我们可以打开创建服务的后台代码文件添加我们自己的代码了,代码主要实现的功能为检索输入的属性值,创建我们新的输出属性TestProperty并发回给搜索索引。
在代码头添加两个using引用
using Microsoft.Office.Server.Search.ContentProcessingEnrichment;using Microsoft.Office.Server.Search.ContentProcessingEnrichment.PropertyTypes;
将类的基类改为IContentProcessingEnrichmentService,添加一个ProcessedItem类型集合来保存从服务输出的托管属性值。
然后实现ProcessItem方法,声明我们创建的自定义属性并根据传入的值将TestProperty的值拼接出来,完整的代码如下所示:
public class ContentEnrichmentExampleService : IContentProcessingEnrichmentService { private readonly ProcessedItem processedItemHolder = new ProcessedItem { ItemProperties = new List<AbstractProperty>() }; public ProcessedItem ProcessItem(Item item) { processedItemHolder.ErrorCode = 0; processedItemHolder.ItemProperties.Clear(); //创建一个新的托管属性作为返回值,该属性必须通过PowerShell注册为输出属性 var testProperty = new Property<string>(); testProperty.Name = "TestProperty"; //需要通过PowerShell注册为输入属性 var authorProperty = item.ItemProperties.FirstOrDefault(i => i.Name == "Author") as Property<List<string>>; var writeProperty = item.ItemProperties.FirstOrDefault(i => i.Name == "LastModifiedTime") as Property<DateTime>; if ((authorProperty != null) && (writeProperty != null)) { testProperty.Value = string.Format("Modified by {0} on {1}.", authorProperty.Value.First(), writeProperty.Value); processedItemHolder.ItemProperties.Add(testProperty); } else { testProperty.Value = "检索托管属性出错。"; processedItemHolder.ItemProperties.Add(testProperty); } return processedItemHolder; } }
接下来需要将这个服务注册到SharePoint,使用PowerShell命令New-SPEnterpriseSearchContentEnrichmentConfiguration进行注册,注册完之后运行一下完全爬网。通过访问http://server/_api/search/query?querytext='*'&selectproperties='title,path,author,testproperty'可以验证我们上面的操作是不是都正确,如果正确将会返回属性TestProperty的服务中定义的字符串格式的值。
更多信息
- SharePoint 2013 开发——搜索架构及扩展
- SharePoint 2013 开发——工作流架构
- SharePoint Server 2013 中管理搜索架构
- SharePoint 2013 企业搜索架构示例
- SharePoint 2013 创建搜索中心及搜索设置
- SharePoint 2013 开发——SharePoint Designer 2013工作流
- SharePoint 2013 开发——SharePoint APP介绍
- SharePoint 2013 开发——发布SharePoint应用程序
- SharePoint 2013 扩展 TilesViewWebPart
- MOSS 2010:Visual Studio 2010开发体验(11)——扩展SharePoint Explorer
- chrome扩展及应用开发——
- SharePoint 2013 开发——概述
- SharePoint 2013 开发——CSOM概要
- SharePoint 2013 搜索体系结构
- SharePoint 2013 开发——构建工作流开发环境
- SharePoint 2013 开发——开发并部署webpart
- SharePoint 2013 开发——开发自定义操作APP
- SharePoint 2013 自定义扩展菜单
- If you object has an "Id' property, it will be set with the generated Id from MongoDB.
- VS2010中使用C#实现向EXCEL文档中写入数据
- VirtualBox访问外网,并能从主机访问的设置
- flash随机数问题
- Java与JSON相互转换
- SharePoint 2013 开发——搜索架构及扩展
- 在Spring、Hibernate中使用Ehcache缓存
- Linux查找方法
- Oracle中定时作业(Job)使用方法详解
- UI_手势
- ZOJ 3551 Bloodsucker(概率DP)
- 自定义图片轮播控件
- makefile中的自动化变量$@,$%,$
- TCP/IP四层模型和OSI七层模型的概念