@Override protected Query newFuzzyQuery(String text, int fuzziness) { BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.setDisableCoord(true); for (Map.Entry<String, Float> entry : weights.entrySet()) { String field = entry.getKey(); FieldType type = schema.getFieldType(field); Query fuzzy; if (type instanceof TextField) { // If the field type is a TextField then use the multi term analyzer. Analyzer analyzer = ((TextField) type).getMultiTermAnalyzer(); String term = TextField.analyzeMultiTerm(field, text, analyzer).utf8ToString(); fuzzy = new FuzzyQuery(new Term(entry.getKey(), term), fuzziness); } else { // If the type is *not* a TextField don't do any analysis. fuzzy = new FuzzyQuery(new Term(entry.getKey(), text), fuzziness); } float boost = entry.getValue(); if (boost != 1f) { fuzzy = new BoostQuery(fuzzy, boost); } bq.add(fuzzy, BooleanClause.Occur.SHOULD); } return simplify(bq.build()); }
@Override protected Query newPrefixQuery(String text) { BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.setDisableCoord(true); for (Map.Entry<String, Float> entry : weights.entrySet()) { String field = entry.getKey(); FieldType type = schema.getFieldType(field); Query prefix; if (type instanceof TextField) { // If the field type is a TextField then use the multi term analyzer. Analyzer analyzer = ((TextField) type).getMultiTermAnalyzer(); String term = TextField.analyzeMultiTerm(field, text, analyzer).utf8ToString(); SchemaField sf = schema.getField(field); prefix = sf.getType().getPrefixQuery(qParser, sf, term); } else { // If the type is *not* a TextField don't do any analysis. SchemaField sf = schema.getField(field); prefix = type.getPrefixQuery(qParser, sf, text); } float boost = entry.getValue(); if (boost != 1f) { prefix = new BoostQuery(prefix, boost); } bq.add(prefix, BooleanClause.Occur.SHOULD); } return simplify(bq.build()); }
/* * (non-Javadoc) * * @see * org.apache.solr.schema.TextField#init(org.apache.solr.schema.IndexSchema, * java.util.Map) */ @Override protected void init(IndexSchema schema, Map<String, String> args) { String compLevel = args.remove("compressionlevel"); if (compLevel != null) try { compressionLevel = Integer.parseInt(compLevel); } catch (NumberFormatException nfe) { compressionLevel = Deflater.BEST_COMPRESSION; } if (compressionLevel < Deflater.BEST_SPEED) compressionLevel = Deflater.BEST_SPEED; if (compressionLevel > Deflater.BEST_COMPRESSION) compressionLevel = Deflater.BEST_COMPRESSION; String compThreshold = args.remove("compressThreshold"); if (compThreshold == null) compThreshold = args.remove("compressionThreshold"); if (compThreshold != null) try { compressionThreshold = Integer.parseInt(compThreshold); } catch (NumberFormatException nfe) { compressionThreshold = 0; } if (compressionThreshold < 0) compressionThreshold = 0; super.init(schema, args); }