public override Query Rewrite(Query original)
{
Query rewritten = base.Rewrite(original);
HashSet<Term> terms = new HashSet<Term>();
rewritten.ExtractTerms(terms);
// Make a single request to remote nodes for term
// stats:
for (int nodeID = 0; nodeID < NodeVersions.Length; nodeID++)
{
if (nodeID == MyNodeID)
{
continue;
}
HashSet<Term> missing = new HashSet<Term>();
foreach (Term term in terms)
{
TermAndShardVersion key = new TermAndShardVersion(nodeID, NodeVersions[nodeID], term);
if (!OuterInstance.TermStatsCache.ContainsKey(key))
{
missing.Add(term);
}
}
if (missing.Count != 0)
{
foreach (KeyValuePair<Term, TermStatistics> ent in OuterInstance.OuterInstance.GetNodeTermStats(missing, nodeID, NodeVersions[nodeID]))
{
TermAndShardVersion key = new TermAndShardVersion(nodeID, NodeVersions[nodeID], ent.Key);
OuterInstance.TermStatsCache[key] = ent.Value;
}
}
}
return rewritten;
}