private boolean rewriteToNGramMatching(Item item, int indexInParent, IndexFacts.Session indexFacts, Query query) {
boolean rewritten = false;
if (item instanceof SegmentItem) {
SegmentItem segments = (SegmentItem)item;
Index index = indexFacts.getIndex(segments.getIndexName());
if (index.isNGram()) {
Item grams = splitToGrams(segments, toLowerCase(segments.getRawWord()), index.getGramSize(), query);
replaceItemByGrams(item, grams, indexInParent);
rewritten = true;
}
}
else if (item instanceof CompositeItem) {
CompositeItem composite = (CompositeItem)item;
for (int i=0; i<composite.getItemCount(); i++)
rewritten = rewriteToNGramMatching(composite.getItem(i), i, indexFacts, query) || rewritten;
}
else if (item instanceof TermItem) {
TermItem term = (TermItem)item;
Index index = indexFacts.getIndex(term.getIndexName());
if (index.isNGram()) {
Item grams = splitToGrams(term,term.stringValue(), index.getGramSize(), query);
replaceItemByGrams(item, grams, indexInParent);
rewritten = true;
}
}
return rewritten;
}