Search Server 2008 RecordClick - Как реализовать? - PullRequest
0 голосов
/ 06 августа 2009

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

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

Ответы [ 3 ]

1 голос
/ 23 сентября 2009

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

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

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

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

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

0 голосов
/ 07 декабря 2012

Я еще не проверял это, но, похоже, BestLeoN понял, как вызвать RecordClick в Search Server 2010: Блоги TechNet> 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);   
     }
} 

Также нашел этот блог с отличной информацией по этому вопросу: http://sharepointfieldnotes.blogspot.nl/2011/06/life-and-times-of-sharepoint-search.html

0 голосов
/ 02 сентября 2009

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

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


ЗАПРОС ОТПРАВЛЕНИЯ ВНИЗ


атрибуты:

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

внутренний xml (это внутренние xml элементы тега ...) f = false в обоих запросах r = 1 в обоих запросах s = используемая область (например, все сайты) c = ссылка фактически нажата (например, http://[somelink]) y = название лучшей ставки, если вы нажали на лучшую ставку (т.е. MyBestBet)

Короче говоря ... поскольку я не мог понять, как сгенерировать атрибут "m", и все попытки отправить обратно на сервер не записывали фактический клик, я определил, что "m" определенно требуется поле. У меня есть нет представления о том, как это генерируется, но оно относится к экземпляру поиска, а не к каждому URL. Поскольку MS, в частности, говорит, чтобы не использовать его, я думаю, они действительно имели в виду.

...