2009-08-06 8 views
0

Microsoft Search Server 2008を設定し、ウェブサービス(Search.asmx)を介してDotNetNukeに検索機能を公開する予定ですが、新しいベストベットなどを作成して検索結果を調整するためにクリックを記録したいと思います。その機能を提供するはずのメソッド "RecordClick" ...問題は私はそれのためのドキュメントを見つけることができません...私が見つけた最高はこれです:http://msdn.microsoft.com/en-us/library/dd905815.aspxSearch Server 2008 RecordClick - 実装方法は?

私は偽の手作りを試みるつもりです上記のリンクからの情報を使用してリクエストしてください。しかし、他の誰かがこれに関する経験を持っていて、より有益な情報を提供できるなら、私は大いに感謝します。

答えて

0

トピックに関する多くの調査の後、最終的には「内部使用のみ」と言われていた一部のMicrosoft APIドキュメントが出てきました。私はそれに挑戦し、とにかくやろうとしました。私はFiddlerを使って要求を打ち破り、それが何をしているのか、それぞれのデータが要求にどういうものなのか把握し、それを複製しようとしました。

私は次のことを学んだ:


REQUESTのBREAKはDOWN


属性:両方のテストで

= falseの両方のテストで D =偽を照会 グラム=を問い合わせますサイトGUID 両方のクエリでh = 0 m = 16進文字列の後にカンマと数字が続くr ...まだ何が分かっているのかわからない。 n =可変数。最初に99、2番目に131 ...おそらく番号または結果? 3番目のテストでは0になるので、結果はおそらく数字ではありません。後の調査によると、これは「信頼性の高い結果」の数です p =サイトのタイトル(検索サイトの名前) q =使用したクエリ t =検索の時間またはUTCでクリック u =クリックしたURL from(おそらく "http://[YOURSITE]/results.aspx"を使用してください) v =両方のテストクエリで現在0です x =おそらく最善の方法ですか?それは、非ベストベットで0と最善のクエリに1示す

内XML F =両方における偽の両方のクエリで R = 1を照会(これらは...タグに内側XML要素です) S =使用範囲(すべてのサイト、例えば) C =リンク実際に(例を。、http://[somelink])をクリック Y =最善の策のタイトルをあなたが最善の策をクリックした場合(すなわち、MyBestBet)

かいつまん...私は "m"属性を生成する方法を理解できず、サーバーにポストバックするすべての試みが実際のクリックを記録しなかったので、 "m"は間違いなく必須フィールドであると判断しました。私はいいえ考えがどのように生成されているが、それは各URLにではなく、検索インスタンスに固有です。 MSは特にそれを使用しないと言って以来、彼らは本当にそれを意味したと思います。

1

RecordClickのXML引数は、公開密封クラスであるシリアル化されたQueryInfoオブジェクト(Microsoft.Office.Server.Search.Query.QueryInfo)です。リフレクターを使用して、クラスをさらに調査することができます。

RecordClickメソッドは、検索結果のレンダリングに使用されるMicrosoft.Office.Server.Search.WebControls.SearchResultsBaseWebPartから呼び出されています。

SearchResultsBaseWebPartによってレンダリングされたページがロードされると、IDが1のRegExpフィルタと一致するすべてのHTMLリンク要素のonlickイベントに対して関数が登録されます。ページのアンロードイベントは、検索WebサービスのRecordClickメソッドにSOAPリクエストを送信するために登録されています。

ReflectorとSharepoint検索サイトを使用して残りの魔法を解くことができるはずです。

こちらがお役に立てば幸いです。

0

私はまだこれをテストしていませんが、BestLeoNは、検索サーバー2010年にRecordClickを呼び出す方法を考え出したようにそれはそう: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

関連する問題