public override void onQueryAction(QueryAction queryAction) { //have statistics for current user if (_userGroupId > 0) { //if it is T type query which we are requested to rearrange if (queryAction.type == 2) { var ourFinalRanking = new List <Tuple <int, float> >(); const float defFactor = 1; const float statisticsFactor = 5; for (int i = 0; i < queryAction.nUrls; i++) { float statisticsValue = -1; //generally - factors from 1 to 10 inclusively float ourRank = (queryAction.nUrls - i) * defFactor; var currUserGroup = _statistics[_userGroupId]; int indexOf = _statistics[_userGroupId].urlsStats.IndexOf(new Tuple <int, float>(queryAction.urls[i], 0.0f)); if (indexOf >= 0) { var elem = currUserGroup.urlsStats.ElementAt(indexOf); statisticsValue = elem.Item2; } /*int kTresh = _statistics[_userGroupId].urlsStats.Count; * for (int k = 0; k < kTresh; k++) * { * var elem = currUserGroup.urlsStats.ElementAt(k); * if (elem.Item1 == queryAction.urls[i]) * { * statisticsValue = elem.Item2; * break; * } * }*/ if (statisticsValue > 0) { ourRank += statisticsValue * statisticsFactor; } ourFinalRanking.Add(new Tuple <int, float>(queryAction.urls[i], ourRank)); } ourFinalRanking.Sort((x1, x2) => x2.Item2.CompareTo(x1.Item2)); for (int i = 0; i < queryAction.nUrls; i++) { queryAction.urls[i] = ourFinalRanking.ElementAt(i).Item1; } } } queryAction.WriteToStream(_writer); }
public override void onQueryAction(QueryAction queryAction) { queryAction.WriteToStream(_fileParts[currentDay]); }