zoukankan      html  css  js  c++  java
  • SharePoint 2013 开发——搜索架构及扩展

    博客地址: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 FilesMicrosoft Office Servers15.0SearchApplicationsExternal,添加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的服务中定义的字符串格式的值。

    更多信息


  • 相关阅读:
    中英文对照 —— 宗教
    十万个为什么 —— 冷知识
    十万个为什么 —— 冷知识
    OpenCV调试利器——Image Watch插件的安装和使用
    matlab 读写其他格式数据文件(excel)
    matlab 读写其他格式数据文件(excel)
    文学创作的艺术手法
    文学创作的艺术手法
    常用cl命令参数解释
    网站的栏目和目录结构规划方法
  • 原文地址:https://www.cnblogs.com/justinliu/p/5961608.html
Copyright © 2011-2022 走看看