/// <summary> Merge results of two searches /// </summary> /// <param name="another">Full text search result to merge with this result</param> /// <returns>Result set containing documents present in both result sets</returns> public FullTextSearchResult Merge(FullTextSearchResult another) { if (Hits.Length == 0 || another.Hits.Length == 0) { return new FullTextSearchResult(new FullTextSearchHit[0], 0); } FullTextSearchHit[] joinHits = new FullTextSearchHit[Hits.Length + another.Hits.Length]; Array.Copy(Hits, 0, joinHits, 0, Hits.Length); Array.Copy(another.Hits, 0, joinHits, Hits.Length, another.Hits.Length); Array.Sort(joinHits, new OidComparer()); int n = 0; for (int i = 1; i < joinHits.Length; i++) { if (joinHits[i-1].oid == joinHits[i].oid) { joinHits[i].Rank += joinHits[i-1].Rank; joinHits[n++] = joinHits[i]; i += 1; } } FullTextSearchHit[] mergeHits = new FullTextSearchHit[n]; Array.Copy(joinHits, 0, mergeHits, 0, n); Array.Sort(joinHits); return new FullTextSearchResult(joinHits, Math.Min(Estimation*n/Hits.Length, another.Estimation*n/another.Hits.Length)); }
/// <summary> Merge results of two searches /// </summary> /// <param name="another">Full text search result to merge with this result</param> /// <returns>Result set containing documents present in both result sets</returns> public FullTextSearchResult Merge(FullTextSearchResult another) { if (Hits.Length == 0 || another.Hits.Length == 0) { return(new FullTextSearchResult(new FullTextSearchHit[0], 0)); } FullTextSearchHit[] joinHits = new FullTextSearchHit[Hits.Length + another.Hits.Length]; Array.Copy(Hits, 0, joinHits, 0, Hits.Length); Array.Copy(another.Hits, 0, joinHits, Hits.Length, another.Hits.Length); Array.Sort(joinHits, new OidComparer()); int n = 0; for (int i = 1; i < joinHits.Length; i++) { if (joinHits[i - 1].oid == joinHits[i].oid) { joinHits[i].Rank += joinHits[i - 1].Rank; joinHits[n++] = joinHits[i]; i += 1; } } FullTextSearchHit[] mergeHits = new FullTextSearchHit[n]; Array.Copy(joinHits, 0, mergeHits, 0, n); Array.Sort(joinHits); return(new FullTextSearchResult(joinHits, Math.Min(Estimation * n / Hits.Length, another.Estimation * n / another.Hits.Length))); }
public FullTextSearchResult(FullTextSearchHit[] hits, int estimation) { Hits = hits; Estimation = estimation; }