2009-08-06 69 views
0

設置Microsoft Search Server 2008並通過webservice(Search.asmx)將搜索功能公開給DotNetNuke,但我們希望記錄點擊以便通過創建新的Best Bets等來定製搜索結果。該web服務具有方法「RecordClick」應該提供該功能...問題是我無法找到它的文檔...我發現的最好的是這樣的:http://msdn.microsoft.com/en-us/library/dd905815.aspxSearch Server 2008 RecordClick - 如何實現?

我要嘗試手工製作假請求使用上述鏈接的信息,但如果有其他人有過這方面的經驗,並可以提供更多有用的信息,我將不勝感激。

回答

0

經過對該主題的大量研究後,我終於遇到了一些微軟API文檔,他們說「僅供內部使用」。我挑戰了這一點,並試圖做到這一點;我使用Fiddler來打破請求並找出它在做什麼,每條數據對於請求意味着什麼等,然後嘗試複製它。

我瞭解到以下內容:


REQUEST分解


屬性:

在兩個測試A =假查詢 d =假在兩個測試查詢 克=現場指導 在兩個查詢中h = 0 m =十六進制字符串,後跟逗號和數字r ...不確定它到底是什麼; n =不同的數字;第一次99,第二次131 ...可能數量或結果? 0在第三次測試,所以可能不是數字結果;後來的研究表明這是「高信度結果」的數量 p =網站標題(搜索網站的名稱) q =我們使用的查詢 t =搜索或點擊UTC的時間 u =點擊的網址從(也許總是隻是使用「http://[YOURSITE]/results.aspx」?) v =目前在兩個測試查詢中爲0 x =可能最好打賭?它示出了0在非最佳-bet和1上的最好的選擇查詢

內部XML(這些是內XML元素的標籤...) F =在兩個假在兩個查詢查詢 R = 1 S =使用(所有網站,例如)範圍 C =聯繫實際點擊(例如,http://[somelink]) Y =最好的選擇稱號,如果你點擊一個最好的選擇(即,MyBestBet)

長話短說...因爲我不知道如何生成「m」屬性,並且所有嘗試回發到服務器都沒有記錄實際的點擊,我確定「m」肯定是必填字段。我有沒有想法如何生成,但它是特定於搜索實例不是每個網址。由於MS特別說不使用它,我猜他們確實是這個意思。

1

RecordClick的XML參數是一個序列化的QueryInfo對象(Microsoft.Office.Server.Search.Query.QueryInfo),它是一個公共密封類。您可以使用反射器進一步調查課程。

從我迄今爲止收集到的RecordClick方法是從Microsoft.Office.Server.Search.WebControls.SearchResultsBaseWebPart調用的,該方法用於呈現搜索結果。

當SearchResultsBaseWebPart呈現的頁面被加載時,爲ID匹配RegExp過濾器的所有HTML鏈接元素的onlick事件註冊一個函數。該頁面的卸載事件也被註冊爲向搜索Web服務RecordClick方法發送soap請求。

您應該可以通過使用Reflector和Sharepoint搜索網站來計算出剩下的魔法。

我希望這會有所幫助。

0

我沒有測試過這還,但它似乎像BestLeoN已經想通了,如何調用RecordClick在搜索服務器2010:TechNet Blogs > BestLeoN

他的代碼:

using (SPSite site = new SPSite("http://mysite")) 
{  
    SPServiceContext serviceContext = SPServiceContext.GetContext(site); 
    SearchServiceApplicationProxy searchAppProxy = ((SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(serviceContext)); 

    for (int i = 0; i < 6; i++)   // You need at least 6 here to make a query popular 
    { 
     string queryStr = "testme"; 
     string queryId = Guid.NewGuid().ToString(); 
     string sessionId = Guid.NewGuid().ToString(); 
     string clickedUrl = "http://mysite/Shared%20Documents/testme.txt"; 

     QueryInfo info = new QueryInfo(); 
     info.QueryGuid = queryId; 
     info.SiteGuid = site.ID.ToString(); 
     info.SessionId = sessionId; 
     info.UserName = System.Threading.Thread.CurrentPrincipal.Identity.Name; 
     info.QueryString = queryStr; 
     info.StartItem = 1; 
     info.ClickTime = DateTime.Now; 
     info.ClickedUrl = clickedUrl; 
     info.ResultsUrl = "http://mysite/fast/Pages/results.aspx?k=testme"; 
     info.ClientType = QueryLogClientType.ObjectModel; 
     info.SearchTime = DateTime.Now;  

     // Send a Click QueryInfo 
     info.LogType = QueryLogType.Click; 
     searchAppProxy.RecordClick(info);  

     // Send a Query QueryInfo 
     info.LogType = QueryLogType.Query; 
     searchAppProxy.RecordClick(info); 
    } 
} 

也發現了這個blog以極大關於此主題的信息:http://sharepointfieldnotes.blogspot.nl/2011/06/life-and-times-of-sharepoint-search.html

相關問題