public BoolItem(boolean value, String indexName, boolean isFromQuery) { super(indexName, isFromQuery, new Substring(String.valueOf(value))); this.value = value; }
static boolean serialize(StringBuilder destination, Item item, boolean includeField) { AndSegmentItem phrase = (AndSegmentItem) item; Substring origin = phrase.getOrigin(); String image; int offset; int length; if (origin == null) { image = phrase.getRawWord(); offset = 0; length = image.length(); } else { image = origin.getSuperstring(); offset = origin.start; length = origin.end - origin.start; } if (includeField) { destination.append(normalizeIndexName(phrase.getIndexName())).append(" contains "); } destination.append("([{"); serializeOrigin(destination, image, offset, length); destination.append(", \"").append(AND_SEGMENTING).append("\": true"); destination.append("}]"); destination.append(PHRASE).append('('); serializeWords(destination, phrase); destination.append("))"); return false; } }
/** * Get the word exactly as received in the request. * This returns the same as getWord if no other raw form is known * * @return the raw form of this word, never null */ @Override public String getRawWord() { if (getOrigin()!=null) return getOrigin().getValue(); return word; }
private IntItem numberSmaller() { int position = tokens.getPosition(); IntItem item = null; try { Token initial = tokens.next(); if (initial.kind != SMALLER) return null; boolean negative = tokens.skipNoIgnore(MINUS); if ( ! tokens.currentIs(NUMBER)) return null; item = new IntItem("<" + (negative ? "-" : "") + tokens.next() + decimalPart(), true); item.setOrigin(new Substring(initial.substring.start, tokens.currentNoIgnore().substring.start, initial.getSubstring().getSuperstring())); // XXX: Unsafe end? return item; } finally { if (item == null) { tokens.setPosition(position); } } }
private IntItem numberGreater() { int position = tokens.getPosition(); IntItem item = null; try { Token initial = tokens.next(); if (initial.kind != GREATER) return null; boolean negative = tokens.skipNoIgnore(MINUS); if ( ! tokens.currentIs(NUMBER)) return null; item = new IntItem(">" + (negative ? "-" : "") + tokens.next() + decimalPart(), true); item.setOrigin(new Substring(initial.substring.start, tokens.currentNoIgnore().substring.start, initial.getSubstring().getSuperstring())); // XXX: Unsafe end? return item; } finally { if (item == null) { tokens.setPosition(position); } } }
Substring substring = new Substring(termSubstring.start, token.substring.start, termSubstring.getSuperstring()); // XXX: Unsafe end? String str = buffer.toString(); item = new WordItem(str, "", true, substring);
private int consumeToTerminator(int start,String terminator) { int end = start; while (end < source.length()) { if (terminatorStartsAt(end,terminator)) break; end++; } tokens.add(new Token(WORD, source.substring(start, end), true, new Substring(start, end, source))); // XXX: Unsafe start? if (end>=source.length()) return end; else return end+terminator.length(); // Don't create a token for the terminator }
@Override public String getRawWord() { if (getOrigin() == null) { return stringValue(); } else { return getOrigin().getValue(); } }
length = image.length(); } else { image = origin.getSuperstring(); offset = origin.start; length = origin.end - origin.start;
item.setOrigin(new Substring(initial.substring.start, tokens.currentNoIgnore().substring.start, initial.getSubstring().getSuperstring())); // XXX: Unsafe end?
private void addToken(Token.Kind kind, String word, int start, int end) { addToken(new Token(kind, word, false, new Substring(start, end, source))); // XXX: Unsafe? }
String image = origin.getSuperstring(); int offset = origin.start; int length = origin.end - origin.start;
public Token toToken(int start,String rawSource) { return new Token(Token.Kind.WORD, replace(), true, new Substring(start, start + token.length(), rawSource)); // XXX: Unsafe? }
@NonNull private TaggableItem segment(String field, OperatorNode<ExpressionOperator> ast, String wordData, boolean fromQuery, Class<?> parent, Language language) { String toSegment = wordData; Substring s = getOrigin(ast); Language usedLanguage = language == null ? currentlyParsing.getLanguage() : language; if (s != null) { toSegment = s.getValue(); } List<String> words = segmenter.segment(toSegment, usedLanguage); TaggableItem wordItem; if (words.size() == 0) { wordItem = new WordItem(wordData, fromQuery); } else if (words.size() == 1 || !phraseArgumentSupported(parent)) { wordItem = new WordItem(words.get(0), fromQuery); } else { wordItem = new PhraseSegmentItem(toSegment, fromQuery, false); ((PhraseSegmentItem) wordItem).setIndexName(field); for (String w : words) { WordItem segment = new WordItem(w, fromQuery); prepareWord(field, ast, segment); ((PhraseSegmentItem) wordItem).addItem(segment); } ((PhraseSegmentItem) wordItem).lock(); } return wordItem; }
length = image.length(); } else { image = origin.getSuperstring(); offset = origin.start; length = origin.end - origin.start;
private Substring getOrigin(OperatorNode<ExpressionOperator> ast) { Map<?, ?> origin = getAnnotation(ast, ORIGIN, Map.class, null, ORIGIN_DESCRIPTION); if (origin == null) { return null; } String original = getMapValue(ORIGIN, origin, ORIGIN_ORIGINAL, String.class); int offset = getMapValue(ORIGIN, origin, ORIGIN_OFFSET, Integer.class); int length = getMapValue(ORIGIN, origin, ORIGIN_LENGTH, Integer.class); return new Substring(offset, length + offset, original); }
addToken(STAR, "*", starPos, starPos + 1); tokens.add(new Token(WORD, source.substring(actualStart, end), true, new Substring(actualStart, end, source))); // XXX: Unsafe?
private Substring getOrigin(Inspector annotations) { if (annotations != null) { Inspector origin = getAnnotationAsInspectorOrNull(ORIGIN, getAnnotationMapFromAnnotationInspector(annotations)); if (origin == null) { return null; } String[] original = {null}; Integer[] offset = {null}; Integer[] length = {null}; origin.traverse((ObjectTraverser) (key, value) -> { switch (key) { case (ORIGIN_ORIGINAL): original[0] = value.asString(); break; case (ORIGIN_OFFSET): offset[0] = (int) value.asDouble(); break; case (ORIGIN_LENGTH): length[0] = (int) value.asDouble(); break; } }); return new Substring(offset[0], length[0] + offset[0], original[0]); } return null; }