private void traverseSameElement(SameElementItem base, IndexFacts.Session indexFacts) { for (Iterator<Item> i = base.getItemIterator(); i.hasNext();) { Item next = i.next(); if (next instanceof WordItem) { lowerCase(base.getFieldName(), (WordItem) next, indexFacts); } } }
@Override public String getName() { return getItemType().toString(); } public String getFieldName() { return fieldName; }
@Override protected void encodeThis(ByteBuffer buffer) { super.encodeThis(buffer); putString(fieldName, buffer); }
static boolean serialize(StringBuilder destination, Item item, boolean includeField) { SameElementItem sameElement = (SameElementItem) item; if (includeField) { destination.append(normalizeIndexName(sameElement.getFieldName())).append(" contains "); } destination.append(SAME_ELEMENT).append('('); for (int i = 0; i < sameElement.getItemCount(); ++i) { if (i > 0) { destination.append(", "); } Item current = sameElement.getItem(i); if (current instanceof WordItem) { new WordSerializer().serialize(destination, current); } else { throw new IllegalArgumentException( "Serializing of " + current.getClass().getSimpleName() + " in same_element is not implemented, please report this as a bug."); } } destination.append(')'); return false; }
@NonNull private Item instantiateSameElementItem(String field, String key, Inspector value) { assertHasOperator(key, SAME_ELEMENT); SameElementItem sameElement = new SameElementItem(field); // All terms below sameElement are relative to this. getChildren(value).traverse((ArrayTraverser) (index, term) -> { sameElement.addItem(walkJson(term)); }); return sameElement; }
@Override protected void appendBodyString(StringBuilder buffer) { buffer.append(fieldName).append(':'); buffer.append('{'); for (Iterator<Item> i = getItemIterator(); i.hasNext();) { TermItem term = (TermItem) i.next(); buffer.append(term.getIndexName()).append(':').append(term.getIndexedString()); if (i.hasNext()) { buffer.append(' '); } } buffer.append('}'); }
@NonNull private Item instantiateSameElementItem(String field, OperatorNode<ExpressionOperator> ast) { assertHasFunctionName(ast, SAME_ELEMENT); SameElementItem sameElement = new SameElementItem(field); // All terms below sameElement are relative to this. IndexNameExpander prev = swapIndexCreator(new PrefixExpander(field)); for (OperatorNode<ExpressionOperator> term : ast.<List<OperatorNode<ExpressionOperator>>> getArgument(1)) { sameElement.addItem(convertExpression(term)); } swapIndexCreator(prev); return sameElement; }