public HitSnippet[] GetSnippets(GetSnippetsRequest req) { object[] results = this.Invoke("GetSnippets", new object[] { req }); return((HitSnippet[])(results[0])); }
private bool tenHits = false; //Flag to do Prefetch check only every 10 hits private void PrefetchSnippetsForNetworkHits(BT.TileHitCollection thc) { int lastDisplayed = 0; if (maxDisplayed != 0) lastDisplayed = thc.LastDisplayed + 1; //We have cached snippets for network hits upto maxDisplayed if (lastDisplayed < maxDisplayed) return; maxDisplayed = thc.LastDisplayed + 1; //Do Prefetch check once every ten hits tenHits = !tenHits; if (!tenHits) return; if (lastDisplayed < thc.NumResults) { int limit = 0; ArrayList networkHits = new ArrayList(); if ((thc.NumResults - lastDisplayed) > MAX_HITS_AHEAD) limit = lastDisplayed + MAX_HITS_AHEAD; else limit = thc.NumResults; ArrayList hits = _rp.hitsCopy; lock (hits.SyncRoot) { if (limit > hits.Count) limit = hits.Count; log.Debug("PrefetchSnippets: Scanning result set for Network Hits from {0} to {1}", lastDisplayed, limit); //Get all NetworkHits with snippets field not initialized: for (int si = lastDisplayed; si < limit ; si++) { if ((hits[si] is NetworkHit) && (((NetworkHit)hits[si]).snippet == null)) networkHits.Add((NetworkHit)hits[si]); } } log.Debug("PrefetchSnippets: Found {0} NetworkHits without snippets", networkHits.Count); while (networkHits.Count > 0) { ArrayList nwHitsPerNode = new ArrayList(); string hostnamePort = GetHostnamePort((NetworkHit)networkHits[0]); //Gather NetworkHits from a specific target Networked Beagle foreach (NetworkHit nh in networkHits) { string hnp = GetHostnamePort(nh); if (hnp == null) continue; if (hnp.Equals(hostnamePort)) { if (nwHitsPerNode.Count < MAX_HIT_IDS_PER_REQ) nwHitsPerNode.Add(nh); else break; } } //Remove NetworkHits for this Networked Beagle int i = networkHits.Count; while (--i >= 0) { string hnp = GetHostnamePort((NetworkHit)networkHits[i]); if ((hnp == null) || hnp.Equals(hostnamePort)) networkHits.RemoveAt(i); } if (nwHitsPerNode.Count > 0) { string[] f3 = hostnamePort.Split(':'); if (f3.Length < 2) { log.Warn("PrefetchSnippets: Invalid format netBeagle URI in NetworkHit"); continue; } BeagleWebService wsp = new BeagleWebService(f3[0], f3[1]); string searchToken = GetSearchToken((NetworkHit)nwHitsPerNode[0]); if (searchToken.Equals("beagle")) //Check if it is Older version of Beagle networking searchToken = null; if (searchToken != null) { int[] hitHashCodes = new int [nwHitsPerNode.Count]; for (int j = 0; j < hitHashCodes.Length; j++) hitHashCodes[j] = ((NetContext) ((NetworkHit)nwHitsPerNode[j]).context).hashCode; log.Debug("PrefetchSnippets: Invoking GetSnippets on {0} for {1} hits", wsp.Hostname, nwHitsPerNode.Count); GetSnippetsRequest sreq = new GetSnippetsRequest(); sreq.searchToken = searchToken; sreq.hitHashCodes = hitHashCodes; ReqContext2 rc = new ReqContext2(wsp, nwHitsPerNode, thc); wsp.BeginGetSnippets(sreq, PrefetchSnippetsResponseHandler, rc); } //Signal change in TileHitCollection due to addition of snippets: //_rp.rootTile.HitCollection.ClearSources(null); } } //end while } //end if }
public System.IAsyncResult BeginGetSnippets(GetSnippetsRequest req, System.AsyncCallback callback, object asyncState) { return(this.BeginInvoke("GetSnippets", new object[] { req }, callback, asyncState)); }
public System.IAsyncResult BeginGetSnippets(GetSnippetsRequest req, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetSnippets", new object[] { req}, callback, asyncState); }
public HitSnippet[] GetSnippets(GetSnippetsRequest req) { object[] results = this.Invoke("GetSnippets", new object[] { req}); return ((HitSnippet[])(results[0])); }
public HitSnippet[] getSnippets(GetSnippetsRequest req) { HitSnippet[] response; string searchToken = req.searchToken; int[] hitHashCodes = req.hitHashCodes; if (!sessionTable.ContainsKey(searchToken)) { response = new HitSnippet[0]; Logger.Log.Warn("GetSnippets: Invalid Search Token received "); return response; } ArrayList results = ((SessionData)sessionTable[searchToken]).results; if ((results == null) || (results.Count == 0)) { response = new HitSnippet[0]; Logger.Log.Warn("GetSnippets: Invalid Search Token received "); return response; } int i = 0; ArrayList hashCodeList = new ArrayList(); hashCodeList.AddRange(hitHashCodes); response = new HitSnippet[hitHashCodes.Length]; Logger.Log.Debug("GetSnippets invoked with {0} hitHashCodes", hitHashCodes.Length); Query query = ((SessionData)sessionTable[searchToken]).query; lock (results.SyncRoot) { string snippet = null; foreach (Hit h in results) { int hashCode = h.GetHashCode(); if (hashCodeList.Contains(hashCode)) { hashCodeList.Remove(hashCode); //Queryable queryable = h.SourceObject as Queryable; Queryable queryable = QueryDriver.GetQueryable (h.SourceObjectName); if (queryable == null) snippet = "ERROR: hit.SourceObject is null, uri=" + h.Uri; else snippet = queryable.GetSnippet (ICollection2StringList(query.StemmedText), h); //GetSnippets always invoked on Target Beagle Node where hits originate: if (snippet == null) snippet = ""; HitSnippet hs = new HitSnippet(); hs.hashCode = hashCode; hs.snippet = snippet.Trim(); response[i++] = hs; if ((hashCodeList.Count == 0) || (i == hitHashCodes.Length)) return response; } } //end foreach } //end lock foreach (int hashCode in hashCodeList) { HitSnippet hs = new HitSnippet(); hs.hashCode = hashCode; hs.snippet = InvalidHitSnippetError; response[i++] = hs; if (i == hitHashCodes.Length) break; } Logger.Log.Warn("GetSnippets invoked some invalid hitIds"); return response; }