說明
這是一篇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
...
更多。