2009-08-06 2 views
0

Настройка сервера Microsoft Search Server 2008 и предоставление функции поиска DotNetNuke через веб-сервис (Search.asmx), но мы хотим записать клики, чтобы настроить результаты поиска, создав новые лучшие ставки и т. Д. У вебсервера есть метод «RecordClick», который должен обеспечить эту функциональность ... проблема заключается в том, что я не могу найти документацию для этого ... я нашел следующее: http://msdn.microsoft.com/en-us/library/dd905815.aspxSearch Server 2008 RecordClick - Как реализовать?

Я собираюсь попытаться создать подделку вручную запросите информацию из этой ссылки выше, но если кто-то еще имеет опыт работы с этим и может предоставить более полезную информацию, я бы очень признателен ей.

ответ

0

После много исследований по этой теме я, наконец, натолкнулся на документацию по API Microsoft, в которой говорилось «только для внутреннего использования». Я оспаривал это и пытался сделать это в любом случае; Я использовал Fiddler, чтобы разбить запрос и выяснить, что он делает, что каждая часть данных предназначена для запроса и т. Д., А затем попыталась дублировать его.

я узнал следующее:


REQUEST ломаются


атрибуты:

а = ложь в обоих тестовых запросов D = ложное в обоих тестовых запросов г = site guid h = 0 в обоих запросах m = шестнадцатеричная строка, за которой следует запятая и numbe r ... не уверен, что это такое; n = изменяющееся число; 99 на первом, 131 на втором ... возможно число или результаты? 0 на третьем тесте, поэтому, вероятно, не числовые результаты; более поздние исследования показывают, что это число «результатов с высоким доверием» p = название сайта (название сайта поиска) q = запрос, который мы использовали t = время поиска или клик в UTC u = щелчок по URL от (может быть, всегда просто использовать «http://[YOURSITE]/results.aspx»?) v = в настоящее время 0 в обоих тестовых запросах x = возможно, лучше всего? он показывает 0 на не лучший-ставку и 1 на лучший запрос ставки

внутренний XML (эти внутренние элементы XML к ... тега) F = ложна в обоих запросах R = 1 в обоих запросах s = объем используется (все сайты, например) с = ссылкой на самом деле нажал (напр., http://[somelink]) у = звание лучшей ставки, если вы выбрали лучшую ставку (то есть., MyBestBet)

Длинной короткая историю ... так как я не мог понять, как создать атрибут «m», и все попытки отправить обратно на сервер не зафиксировали фактический щелчок, я решил, что «m» определенно является обязательным полем. У меня есть no Идея, как это генерируется, но она специфична для экземпляра поиска не для каждого URL-адреса. Поскольку MS конкретно говорит, что не использовать его, я думаю, они действительно это значили.

1

Аргумент XML RecordClick - это сериализованный объект QueryInfo (Microsoft.Office.Server.Search.Query.QueryInfo), который является общедоступным закрытым классом. Вы можете использовать отражатель для дальнейшего изучения этого класса.

Из того, что я собрал до сих пор, метод RecordClick вызывается из Microsoft.Office.Server.Search.WebControls.SearchResultsBaseWebPart, который используется для рендеринга результатов поиска.

Когда загружается страница, отображаемая в SearchResultsBaseWebPart, функция регистрируется для события onlick всех элементов HTML-ссылки, whos ID соответствует фильтру RegExp. Событие разгрузки страницы также зарегистрировано для отправки запроса на мыло к методу RecordClick в веб-службе поиска.

Вы можете усовершенствовать оставшуюся магию с помощью Reflector и сайта поиска Sharepoint.

Надеюсь, это поможет.

0

Я не проверял этого, но похоже BestLeoN придумал, как назвать RecordClick в Search Server 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

 Смежные вопросы

  • Нет связанных вопросов^_^