说明
这是一篇SharePoint的问题汇总帖。由于我主要关心使用SharePoint来完成一些搜索的功能,所以涉及的问题大多数和搜索有关。问题的解决一部分是来自网友的博客,一部分是社区朋友的指导,还有就是微软的技术支持提供的解答。在本文中会尽量给出出处,但无法做到面面俱到,特此声明。
另外,本文同样是跟进帖,会随着时间的推移而添加内容。
迁移(从SP2010到SP2013)
主要是在SP2013中不需要FAST Search Server服务器了,FAST在SP2013作为搜索服务提供。同时,SP2013优化了SP2010中的一些问题(例如,移除了浅表精简,优化了深度精简[注:浅表精简会导致精简面板不可用的问题]),作为代价,SP2013的搜索移除了FAST Search支持的一些特性,例如配置脚本执行,特定类型的连接器,FAST的web爬网等(特定的外部数据使用BCS模型完成,对web则使用内容源爬网),这些都是为了易用性。不过,对于中文用户而言,最蛋疼的莫过于移除了对中文的词干分解,导致句子或者短语无法在搜索结果中高亮显示(2013/5/27,解决方式:为结果源启用FQL,就可以正常的高亮显示了)。
关于这个主题,MSDN上有官方的说明,参照:http://technet.microsoft.com/en-us/library/ff607742.aspx
属性提取
注意,这里的属性提取有别于“自定义属性提取程序(更好的翻译我觉得应该是钻取)”,这里指的是“外部内容处理管道”(SP2010的说法)。在SP2010中可以在FAST的bin目录下编写一个Console应用程序来提取属性,同时需要配置好xml文件,在SP2013中只需要编写一个WCF服务,然后将使用PowerShell将这个服务注册给SharePoint的SSA(SearchServiceApplication)就可以了,非常方便。相关的链接如下:
http://technet.microsoft.com/en-us/library/ff607742.aspx
在 SharePoint Server 2013 中规划爬网和联合
http://technet.microsoft.com/zh-cn/library/jj219577.aspx
在 SharePoint Server 2013 中创建和部署自定义实体提取程序
http://technet.microsoft.com/zh-cn/library/jj219480.aspx
Content Enrichment in SharePoint 2013(如何通过代码来丰富我们需要具体提取规则)
http://www.c-sharpcorner.com/UploadFile/d2ee01/content-enrichment-in-sharepoint-2013/
另外SP2013还改进了一点,就是提取的属性直接变成了托管属性,在SP2010中是爬网属性,还需要配置映射。有段时间我非常关注New-FASTSearchMetadataCrawled Property这个cmdlet,现在看来应该就是为这个内容钻取准备的,在SP2013中已经不被支持。
另外,在注册这个服务的时候,记得使用触发器表达式,以防止对所有的内容应用提取器,从而防止大幅降低爬网性能。
配置查看重复和折叠
通过搜索结果页面的核心搜索结果webpart的配置,可以出现一个“查看重复项”的按钮,点击这个按钮SP会列出所有的相同的项目(通过内容计算出fid);如果编程来实现搜索的话,就可以使用折叠功能,通过某个托管属性来将一部分结果规划为一组。详细内容参考以下链接:
http://msdn.microsoft.com/zh-cn/library/ff521593(v=office.14).aspx
http://msdn.microsoft.com/zh-cn/library/jj687488.aspx
备用访问映射的配置
在[管理中心]-[配置备用访问映射],点击编辑公共区域URL,然后添加映射。如果栏目不够用,则点击添加,然后选择类型就OK。
特别需要注意为80端口配置备用访问映射的时候出现的问题。由于80端口是默认端口,所以将80端口映射到另外一个端口(通常是外网)的时候,外部访问需要带端口访问,这个时候备用访问映射将不工作,然而又无法显示指定80端口访问。所以,一般的解决方案是,为IIS站点(SP2013)添加一个绑定,然后对这个绑定(不是80)做映射。
修正:这里还要求映射的端口和目标端口一致。例如,内网的10086,外网也应该是10086。
在SP2013中不可用的内容
无法配置对脚本执行爬网(爬网时执行脚本)。
“服务器名称映射”这个功能仅仅是用来重定向结果的,但是《迁移》一文将他作为“在对URL爬网前修改URL”的迁移路径(其实也说得过去)。
规划爬网规则
爬网规则越前优先级越高。在SP中,不指定爬网规则的情况下,爬网很奇怪,所以,一般建议指定最后两个爬完规则为:http://*,https://* 为排除。
另外,仅使用URL上的链接而不对URL本身进行爬网这一条指定的时候需要注意,优先级尽量低,或者不要和你想收录的页面URL匹配,不然的话会被排除的。
定制搜索结果的模板
在SP2013中可以使用javascript和css来定制搜索结果,非常方便,参考这个博友的博客。
http://blog.csdn.net/farawayplace613/article/details/8455085
需要注意的是,如果修改了模板,需要将状态为“草稿”的模板发布,另外,如果希望匿名用户看到更改,需要发布整个页面。
规划搜索服务器场的拓扑
在 SharePoint Server 2013 中管理搜索拓扑
http://technet.microsoft.com/zh-cn/library/jj219705.aspx
在 SharePoint Server 2013 中管理搜索组件
http://technet.microsoft.com/zh-cn/library/jj862354.aspx
在 SharePoint Server 2013 中管理索引组件
http://technet.microsoft.com/zh-cn/library/jj862355.aspx
在 SharePoint Server 2013 中更改默认搜索拓扑
http://technet.microsoft.com/zh-cn/library/jj862356.aspx
SharePoint Server 2013 中的搜索概述
http://technet.microsoft.com/zh-cn/library/jj219738.aspx
还可以参考我的另一篇文章:
http://www.cnblogs.com/lightluomeng/archive/2013/03/15/2960977.html
联合搜索
在SP2010中可以联合支持OPenSearch1.0/1.1的公共搜索引擎的结果,在SP2013中也是可以的,参考这篇文章:
SharePoint 2013: Federated Search Deep Dive – Twitter
http://melcher.it/2012/11/sharepoint-2013-federated-search-deep-dive-twitter/
主要问题其实是,如何设置源URL,这里给出bing的可用的URL:
http://www.bing.com/search?q={?searchTerms}&format=rss&Market=en-US
http://www.bing.com/search?q={?searchTerms}&format=rss&Market=zh-cn
另外,还可以参考以下两篇文章,解决布局的问题。
http://melcher.it/2012/11/sharepoint-2013-federated-search-deep-dive-twitter/#!prettyPhoto
对数据库爬网(非SQL,未被支持的数据库)
这里有几个备选方案供参考:
外部数据简介
http://office.microsoft.com/zh-cn/sharepoint-server-help/introduction-to-external-data-HA102891586.aspx
开发自定义连接器(可能的一个备选方案),SharePoint 2013 中的搜索连接器框架
http://msdn.microsoft.com/library/38560a3b-69c6-4a56-97ca-3625bbd5755e.aspx
SharePoint 2013: MyFileConnector custom BCS indexing connector sample
http://code.msdn.microsoft.com/office/SharePoint-2013-MyFileConne-79d2ea26
实现一个webservice,然后注册给SharePoint
2010 http://msdn.microsoft.com/zh-cn/library/ff464398.aspx
2013 http://msdn.microsoft.com/library/38560a3b-69c6-4a56-97ca-3625bbd5755e.aspx
如何配置匿名访问
总的来说就是要在WebApplication和Page两个地方配置匿名。
首先,在应用服务管理(WEB)中找到80(非管理应用)应用,然后点击“身份认证程序”,然后点击文字为“默认”的链接,在出现的窗口中,点击“启用匿名访问”。然后在指定的页面中,点击“编辑”-“权限”(或者是,设置-权限-匿名)。
运行配置向导连接到数据库失败
提示是:运行SP2013配置向导的时候提示无法连接到master数据库。
需要使用评估版(SQL 2012)而不是Express版。
索引重新分区失败
http://technet.microsoft.com/zh-cn/library/jj862355.aspx
一般来讲,重置内容索引之后规划分区都会成功。问题处在已经爬网然后要分区的时候,这个时候可能需要注意内存和磁盘,这两个可用空间可能导致问题。出错提示为:Topology activation failed.Redistribution of data failed for index components.
搜索管理中心的内内容源状态显示为已被系统暂停
一般出现在对SSA执行暂停指令之后(为了索引重分区),调用以下方法:
PS C:\Users\administrator.OW> $ssa = Get-SPEnterpriseSearchServiceApplication
PS C:\Users\administrator.OW> $ssa.ResumeAfterIndexRepartitioning()
True
PS C:\Users\administrator.OW>
增量爬网和外部内容处理
并不是特别确定,但是根据我的测试,增量爬网会将对象发送给外部内容处理管道。
搜索组件在管理中心中显示为红叉
等待。
修改拓扑。
重建SearchServiceApplication。
重建场。
定制搜索结果高亮的颜色
F12可以看到以下内容:
如图所示:高亮显示通过两个class确定。第一层是位置,表示标题或者摘要;第二层则是高亮的class。第一层有两种情况:ms-srch-ellipsis和ms-srch-item-summary;第二层只有一种情况(我们关心的)。
而引用的csss文件的路径如图:
C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\WEB SERVER EXTENSIONS\15\TEMPLATE\LAYOUTS\2052\STYLES\THEMABLE
更改思路:将摘要的高亮设置为红色,粗体;将标题的高亮设为暗红色[#990000 ](由于其上下文是蓝色的)。
修改页面上方的SharePoint字眼
主要是对母版页下手,对搜索和搜索结果页面而言,使用seattle。
可以在母版页中加入脚本,更改指定位置的字样:
<script> $('div.ms-core-brandingText').text("啊啊啊啊啊啊"); </script>
同时需要加入jquery的引用:
<script src="http://code.jquery.com/jquery-latest.js"></script>
同时使用以下更改徽标的链接:
$('a.ms-siteicon-a').attr("href", "http://yoursite.com");
注意:修改过的母版页需要在管理中心中进行发布。
停止分布式缓存服务
MSDN上给出的cmdlet有出入,如下:
Stop-SPDistributedCacheServiceInstanceGracefullyOnLocalServer
Remove-SPDistributedCacheServiceInstanceOnLocalServer
配置分布式缓存服务
要点如下:
需要停止服务器上的所有分布式缓存服务,步骤参考MSDN。
在执行Set-CacheHostConfig CMDLET的时候,只提供CacheSize参数,然后后续会要求提供computername和CachePort,这样就可以配置成功,如果一次性提供所有参数,则配置失败。
另外,使用computername而不是hostname。
http://technet.microsoft.com/zh-cn/library/jj219613.aspx
如图:
更正,后来我又碰到这个问题,呃...发现上面的解决方式是胡扯...这里更正下。
正确的做法是启动一个服务(好吧我承认,PowerShell显示这个服务本来就是开启的),(RemoteRegister);如果启动后没解决问题,那么应该重启另一个服务(Restart-CacheCluster)。
这是从MSDN社区找到的解决方案:http://social.msdn.microsoft.com/Forums/zh-CN/velocity/thread/e977c98d-32e6-4b58-8947-6248cdcf5020
2013/5/31更正:如果还是没解决问题,配置前可以先执行下Use-CacheCluster,然后再进行配置。
这篇文章提供了修正分布式缓存节点的问题,具体做法是:
如果在某一台缓存主机中执行cmdlet[Use-CacheCluster]提示连接错误,那么表示这台缓存主机的分布式缓存服务出于不正常的状态。于是使用cmdlet[Get-SPServiceInstance]获取SharePoint服务实例,使用过滤操作找出分布式缓存服务。需要注意,这个操作会返回服务器场中所有的分布式缓存服务,需要从中过滤出指定主机名称和disabled状态的分布式缓存服务实例。通过对象调用其$instance.Delete()方法注销实例。
此时,如果喜欢重新添加分布式缓存服务,只需要执行cmdlet[Add-SPDistributedCacheServiceInstance]。
另外,正常关闭分布式缓存服务的两个cmdlet指令是:
Stop-SPDistributedCacheServiceInstance -Graceful
Remove-SPDistributedCacheServiceInstance
自定义分词
可以对中文进行自定义分词,需要实现几个C++接口(楼主我不会)。
http://msdn.microsoft.com/zh-cn/library/jj163981.aspx
http://msdn.microsoft.com/zh-cn/library/ms693186(v=vs.85).aspx
部署规划几则(最佳实践)
http://technet.microsoft.com/zh-cn/library/ff621103.aspx
http://technet.microsoft.com/zh-cn/library/ff607864.aspx
http://technet.microsoft.com/zh-cn/library/ff607811.aspx
禁用/启用核心搜索结果的webpart的词干分解
默认开启的,中文的话,禁用/启用都是一样的(参考第一条)。
http://technet.microsoft.com/en-us/library/gg549987.aspx
REST API配置相关
SharePoint有一套REST风格的API,这里仅提及和搜索相关的API配置,计划在后续的文章中详述这些内容,这里先引用以下资料:
为SharePoint2013搜索启用匿名缓存,从而提升面向公众的搜索性能。
http://blog.mastykarz.nl/anonymous-search-results-cache-sharepoint-2013-public-websites/
使用ULS验证缓存,参考:http://ulsviewer.codeplex.com/
SharePoint2013的日志位于目录:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\LOGS
为SharePoint的REST搜索API启用匿名搜索。
http://blog.mastykarz.nl/configuring-sharepoint-2013-search-rest-api-anonymous-users/
在使用REST API进行搜索的时候,需要对特殊字符进行转换,参考:
http://www.nowamagic.net/librarys/veda/detail/327
...
更多。
所有评论(0)