public boolean isCompatibleWith(IntItem item) { if ( ! indexName.equals(item.getIndexName())) return false; if (creator != item.getCreator()) return false; if (ranked != item.isRanked()) return false; if (weight != item.getWeight()) return false; return true; }
private IndexedItem convertIntToWord(Item orig) { IntItem o = (IntItem) orig; return new WordItem(o.stringValue(), o.getIndexName(), o.isFromQuery()); }
.append(normalizeIndexName(intItem.getIndexName())) .append(", ").append(intItem.getFromLimit().number()) .append(", ").append(intItem.getToLimit().number())
public FieldRange(IntItem item) { this.indexName = item.getIndexName(); this.creator = item.getCreator(); this.ranked = item.isRanked(); this.weight = item.getWeight(); addRange(item); }
@Override boolean serialize(StringBuilder destination, Item item) { IntItem intItem = (IntItem) item; if (intItem.getFromLimit().number().equals(intItem.getToLimit().number())) { destination.append(normalizeIndexName(intItem.getIndexName())).append(" = "); annotatedNumberImage(intItem, intItem.getFromLimit().number().toString(), destination); } else if (intItem.getFromLimit().isInfinite()) { destination.append(normalizeIndexName(intItem.getIndexName())); destination.append(intItem.getToLimit().isInclusive() ? " <= " : " < "); annotatedNumberImage(intItem, intItem.getToLimit().number().toString(), destination); } else if (intItem.getToLimit().isInfinite()) { destination.append(normalizeIndexName(intItem.getIndexName())); destination.append(intItem.getFromLimit().isInclusive() ? " >= " : " > "); annotatedNumberImage(intItem, intItem.getFromLimit().number().toString(), destination); } else { serializeAsRange(destination, intItem); } return false; }
private boolean optimizeAnd(AndItem and, IndexFacts.Session indexFacts) { // Find consolidated ranges by collecting a list of compatible ranges List<FieldRange> fieldRanges = null; for (Iterator<Item> i = and.getItemIterator(); i.hasNext(); ) { Item item = i.next(); if ( ! (item instanceof IntItem)) continue; IntItem intItem = (IntItem)item; if (intItem.getHitLimit() != 0) continue; // each such op gets a different partial set: Cannot be optimized if (intItem.getFromLimit().equals(intItem.getToLimit())) continue; // don't optimize searches for single numbers if (indexFacts.getIndex(intItem.getIndexName()).isMultivalue()) continue; // May match different values in each range if (fieldRanges == null) fieldRanges = new ArrayList<>(); Optional<FieldRange> compatibleRange = findCompatibleRange(intItem, fieldRanges); if (compatibleRange.isPresent()) compatibleRange.get().addRange(intItem); else fieldRanges.add(new FieldRange(intItem)); i.remove(); } // Add consolidated ranges if (fieldRanges == null) return false; boolean optimized = false; for (FieldRange fieldRange : fieldRanges) { and.addItem(fieldRange.toItem()); optimized |= fieldRange.isOptimization(); } return optimized; }
firstWord = new WordItem(asInt.stringValue(), asInt.getIndexName(), true, asInt.getOrigin()); firstWord = new WordItem(asInt.stringValue(), asInt.getIndexName(), true, asInt.getOrigin());