博客地址:http://blog.csdn.net/FoxDave

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 开发——搜索架构及扩展的更多相关文章

  1. SharePoint 2013 企业搜索架构示例

    博客地址:http://blog.csdn.net/FoxDave 本文参考自微软官方的Chart,我们来看一下企业中对于不同规模SharePoint搜索的场的架构是什么样的. 对于搜索场的规模, ...

  2. SharePoint 2013 开发——工作流架构

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2013的工作流较之前有了不同,第一次真正地作为独立的服务的概念推出了.这意味着SharePoint工作流不再 ...

  3. SharePoint 2013 开发——概述

     博客地址:http://blog.csdn.net/FoxDave 近来阅读SharePoint 2013开发一书,带着与大家一起分享其中的内容. 部署场景: 本地部署(On-Premise D ...

  4. SharePoint 2013 定制搜索显示模板

    前言 之前我们已经介绍了一些关于搜索的相关配置,当然,用户关于搜索的要求可能是各种各样.有时候,用户会说,你们的显示结果太Low了,确实是:不过,在SharePoint中,我们可以很容易的定制搜索结果 ...

  5. SharePoint 2013 禁用搜索服务

    原文:SharePoint 2013 禁用搜索服务 前言,在SharePoint2013中,对于硬件需求的提升,让我们虚机里安装总是一筹莫展,尤其开启了搜索服务以后,对于内存的消耗就更加严重,尤其对于 ...

  6. SharePoint 2013 定制搜索显示模板(二)

    前言 之前一篇博客,简单的介绍了如何定制搜索显示模板,这一次,我们介绍一下如何定制搜索显示时,弹出来的那个页面,相信这个大家也都会遇到的. 1.第一部分就是搜索显示模板的部分,第二部分就是搜索项目详情 ...

  7. SharePoint 2013开发环境准备一些小事项

    开发慢慢向着SharePoint 2013迁移,环境也开始慢慢准备起来了.由于FAST Search的集成,和缓存服务的加入,SharePoint 2013对开发机器要求的不是一般的高.这里介绍一下如 ...

  8. SharePoint 2013 开发——APP开发的考虑和建议

    博客地址:http://blog.csdn.net/FoxDave 需要考虑的方面: 1. 记得CSOM授予网站集及以下的权限,而场解决方案需要整个场的访问权限. 2. 由于应用程序是彼此完全独立 ...

  9. SharePoint 2013 开发——APP安全模型

    博客地址:http://blog.csdn.net/FoxDave 除非开启了SharePoint网站的匿名访问,否则对于入站的请求,必须要有一个身份验证的过程(Authentication),这个 ...

随机推荐

  1. Apple开发者账号简介

    苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...

  2. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  3. Spark 1.1.0 安装测试 (分布式 Yarn-cluster模式)

    Spark版本:spark-1.1.0-bin-hadoop2.4 (下载:http://spark.apache.org/downloads.html) 服务器环境的情况,请参考上篇博文 hbase ...

  4. 使用ajax登录格式

    登录页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  5. (转)MySQL命令行--导入导出数据库

    MySQL命令行导出数据库:   1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Se ...

  6. hadoop2.0初识1.2

    1 hadoop启动方式(三种) 1.1 各个服务组件逐一启动 *dfs hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode ...

  7. python 反射调用

    因为目前在写一个python的项目,用到了Python的反射机制,所以做一下笔记,把写项目过程中的感悟记下来. 先简单介绍下Demo用到的函数: sys.path 是python的模块的路径集,是一个 ...

  8. IE6兼容性问题及IE6常见bug详细汇总

    转载地址:http://www.jb51.net/css/76894.html 1.IE6怪异解析之padding与border算入宽高 原因:未加文档声明造成非盒模型解析 解决方法:加入文档声明&l ...

  9. 基础笔记4(包装类,时间date. calendar

    1.包装类 基本类型和对象. 编译器会对基本类型和包装类进行自动拆箱,装箱处理 Interger  i=5; int i=new Interger(4); 一个缓存问题:以便提高效率 integer ...

  10. jQuery学习笔记整理

    一.子元素选择器.:nth-child:匹配父元素下的第N个子或者奇偶元素.注意:序号是从1开始的,而eq是从0开始计数的!它匹配的是前方选择器选择到的元素的父元素下面的第几个元素.例如:ul li: ...