SharePoint 2013 開發——搜尋架構及擴充套件
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的服務中定義的字串格式的值。
相關文章
- 使用 Postgres 的全文搜尋構建可擴充套件的事件驅動搜尋架構套件事件架構
- 可擴充套件的搜尋元件套件元件
- Laravel 之搜尋引擎elasticsearch擴充套件ScoutLaravelElasticsearch套件
- YouTube的架構擴充套件架構套件
- 微軟推出必應程式碼搜尋擴充套件微軟套件
- Chrome瀏覽器擴充套件開發系列之三:Google Chrome瀏覽器擴充套件的架構Chrome瀏覽器套件Go架構
- SharePoint 2013 開發——工作流架構架構
- 微服務架構擴充套件FreeStyle微服務架構套件
- 開發php擴充套件PHP套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- 開源 [輪子] Laravel 專案架構擴充套件包Laravel架構套件
- Chrome瀏覽器擴充套件開發系列之十九:擴充套件開發示例Chrome瀏覽器套件
- 架構設計的立方體擴充套件架構套件
- chrome擴充套件程式開發Chrome套件
- Go開發PHP擴充套件GoPHP套件
- php擴充套件開發初探PHP套件
- LLM 擴充套件開發工具套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- ✍ 寫一個擴充套件性較強的搜尋主頁套件
- [外掛擴充套件]通過標題搜尋站外資訊套件
- 微服務架構:自動擴充套件簡介微服務架構套件
- 如何開發Chrome擴充套件程式Chrome套件
- Chrome 擴充套件程開發初探Chrome套件
- Chrome 擴充套件程式的開發與釋出 — 手把手教你開發擴充套件程式Chrome套件
- java Spring Cloud企業快速開發架構之SpringCloud-Eureka的REST API及API擴充套件JavaSpringCloud架構GCRESTAPI套件
- 谷歌的三大可擴充套件核心架構谷歌套件架構
- 【軟體架構篇】常見可擴充套件模式架構套件模式
- 簡要剖析:可擴充套件的微服務架構套件微服務架構
- 可擴充套件Web架構與分散式系統套件Web架構分散式
- PHP擴充套件開發教程2 – 編寫第一個擴充套件 hello worldPHP套件
- PHP核心介紹及擴充套件開發指南—類和物件PHP套件物件
- Chrome 擴充套件的開發實戰Chrome套件
- [開發效率]Kotlin之擴充套件Kotlin套件
- Chrome 擴充套件外掛開發DEMOChrome套件
- 報表開發之擴充套件GROUP BY套件
- 如何擴充套件開發團隊(譯)套件
- 在亞馬遜AWS上擴充套件微服務架構(英文PPT)亞馬遜套件微服務架構
- Chrome瀏覽器擴充套件開發系列之一:初識Google Chrome擴充套件Chrome瀏覽器套件Go