@Override protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws IOException { if (maxEdits == 0 || prefixLength >= term.text().length()) { // can only match if it's exact return new SingleTermsEnum(terms.iterator(), term.bytes()); } return new FuzzyTermsEnum(terms, atts, getTerm(), maxEdits, prefixLength, transpositions); }
private static void planFuzzyQuery(final StringBuilder builder, final FuzzyQuery query) { builder.append(query.getTerm()); builder.append(",prefixLength="); builder.append(query.getPrefixLength()); builder.append(",maxEdits="); builder.append(query.getMaxEdits()); }
protected FilteredTermEnum getEnum(IndexReader reader) throws IOException { return new FuzzyTermEnum(reader, getTerm(), minimumSimilarity, prefixLength); }
protected FilteredTermEnum getEnum(IndexReader reader) throws IOException { return new FuzzyTermEnum(reader, getTerm(), minimumSimilarity, prefixLength); }
protected FilteredTermEnum getEnum(IndexReader reader) throws IOException { return new FuzzyTermEnum(reader, getTerm(), minimumSimilarity, prefixLength); }
public String toString(String field) { StringBuffer buffer = new StringBuffer(); Term term = getTerm(); if (!term.field().equals(field)) { buffer.append(term.field()); buffer.append(":"); } buffer.append(term.text()); buffer.append('~'); buffer.append(Float.toString(minimumSimilarity)); buffer.append(ToStringUtils.boost(getBoost())); return buffer.toString(); }
public String toString(String field) { StringBuffer buffer = new StringBuffer(); Term term = getTerm(); if (!term.field().equals(field)) { buffer.append(term.field()); buffer.append(":"); } buffer.append(term.text()); buffer.append('~'); buffer.append(Float.toString(minimumSimilarity)); buffer.append(ToStringUtils.boost(getBoost())); return buffer.toString(); }
@Override public void writeObject(ObjectOutput output, FuzzyQuery object) throws IOException { output.writeObject(object.getTerm()); output.writeInt(object.getPrefixLength()); output.writeBoolean(object.getTranspositions()); output.writeInt(object.getMaxEdits()); output.writeInt((int) getValue(object, MAX_EXPANSIONS_FIELD)); }
@Override protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws IOException { if (maxEdits == 0 || prefixLength >= term.text().length()) { // can only match if it's exact return new SingleTermsEnum(terms.iterator(), term.bytes()); } return new FuzzyTermsEnum(terms, atts, getTerm(), maxEdits, prefixLength, transpositions); }
@Override protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws IOException { if (maxEdits == 0 || prefixLength >= term.text().length()) { // can only match if it's exact return new SingleTermsEnum(terms.iterator(), term.bytes()); } return new FuzzyTermsEnum(terms, atts, getTerm(), maxEdits, prefixLength, transpositions); }
@Override protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws IOException { if (maxEdits == 0 || prefixLength >= term.text().length()) { // can only match if it's exact return new SingleTermsEnum(terms.iterator(), term.bytes()); } return new FuzzyTermsEnum(terms, atts, getTerm(), maxEdits, prefixLength, transpositions); }
protected void flattenQuery(FuzzyQuery query, float pathBoost, Object sourceOverride, IndexReader reader, Callback callback) { float boost = pathBoost; if (query.getMaxEdits() == 0) { callback.flattened(query.getTerm().bytes(), boost, sourceOverride); } String term = query.getTerm().bytes().utf8ToString(); if (query.getPrefixLength() >= term.length()) { callback.flattened(query.getTerm().bytes(), boost, sourceOverride); return; } FuzzyQueryInfo key = new FuzzyQueryInfo(term, query); if (!sentAutomata.add(key)) { return; } // Make an effort to resolve the fuzzy query to an automata String fuzzed = term.substring(query.getPrefixLength()); int editDistance = query.getMaxEdits(); if (editDistance > LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE) { editDistance = LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE; } LevenshteinAutomata automata = new LevenshteinAutomata(fuzzed, query.getTranspositions()); Automaton automaton = automata.toAutomaton(editDistance); if (query.getPrefixLength() > 0) { Automaton prefix = Automata.makeString(term.substring(0, query.getPrefixLength())); automaton = Operations.concatenate(prefix, automaton); } Object source = sourceOverride == null ? key : sourceOverride; callback.flattened(automaton, boost, source.hashCode()); }
private static JsonObject convertFuzzyQuery(FuzzyQuery query) { String field = query.getTerm().field(); JsonObject fuzzyQuery = JsonBuilder.object() .add( "fuzzy", JsonBuilder.object().add( field, JsonBuilder.object() .addProperty( "value", query.getTerm().text() ) .addProperty( "fuzziness", query.getMaxEdits() ) .addProperty( "prefix_length", query.getPrefixLength() ) .addProperty( "boost", query.getBoost() ) ) ).build(); return wrapQueryForNestedIfRequired( field, fuzzyQuery ); }
final FuzzyQuery fq = (FuzzyQuery) query; if (fq.getField().equals(field)) { String utf16 = fq.getTerm().text(); int termText[] = new int[utf16.codePointCount(0, utf16.length())]; for (int cp, i = 0, j = 0; i < utf16.length(); i += Character.charCount(cp)) {
private static JsonObject convertFuzzyQuery(FuzzyQuery query) { String field = query.getTerm().field(); JsonObject fuzzyQuery = JsonBuilder.object() .add( "fuzzy", JsonBuilder.object().add( field, JsonBuilder.object() .addProperty( "value", query.getTerm().text() ) .addProperty( "fuzziness", query.getMaxEdits() ) .addProperty( "prefix_length", query.getPrefixLength() ) .append( boostAppender( query ) ) ) ).build(); return wrapQueryForNestedIfRequired( field, fuzzyQuery ); }
private static JsonObject convertFuzzyQuery(FuzzyQuery query) { String field = query.getTerm().field(); JsonObject fuzzyQuery = JsonBuilder.object() .add( "fuzzy", JsonBuilder.object().add( field, JsonBuilder.object() .addProperty( "value", query.getTerm().text() ) .addProperty( "fuzziness", query.getMaxEdits() ) .addProperty( "prefix_length", query.getPrefixLength() ) .append( boostAppender( query ) ) ) ).build(); return wrapQueryForNestedIfRequired( field, fuzzyQuery ); }