// Handle additional arguments... protected void setArgs(IndexSchema schema, Map<String, String> args) { // default to STORED, INDEXED, OMIT_TF_POSITIONS and MULTIVALUED depending on schema version properties = (STORED | INDEXED); float schemaVersion = schema.getVersion(); if (schemaVersion < 1.1f) properties |= MULTIVALUED; if (schemaVersion > 1.1f) properties |= OMIT_TF_POSITIONS; if (schemaVersion < 1.3) { args.remove("compressThreshold"); } if (schemaVersion >= 1.6f) properties |= USE_DOCVALUES_AS_STORED; this.args = Collections.unmodifiableMap(args); Map<String, String> initArgs = new HashMap<>(args); initArgs.remove(CLASS_NAME); // consume the class arg trueProperties = FieldProperties.parseProperties(initArgs, true, false); falseProperties = FieldProperties.parseProperties(initArgs, false, false); properties &= ~falseProperties; properties |= trueProperties; for (String prop : FieldProperties.propertyNames) initArgs.remove(prop); init(schema, initArgs); String positionInc = initArgs.get(POSITION_INCREMENT_GAP); if (positionInc != null) { Analyzer analyzer = getIndexAnalyzer(); if (analyzer instanceof SolrAnalyzer) { ((SolrAnalyzer) analyzer).setPositionIncrementGap(Integer.parseInt(positionInc)); } else { throw new RuntimeException( "Can't set " + POSITION_INCREMENT_GAP + " on custom analyzer " + analyzer.getClass()); } analyzer = getQueryAnalyzer(); if (analyzer instanceof SolrAnalyzer) { ((SolrAnalyzer) analyzer).setPositionIncrementGap(Integer.parseInt(positionInc)); } else { throw new RuntimeException( "Can't set " + POSITION_INCREMENT_GAP + " on custom analyzer " + analyzer.getClass()); } initArgs.remove(POSITION_INCREMENT_GAP); } this.postingsFormat = initArgs.remove(POSTINGS_FORMAT); this.docValuesFormat = initArgs.remove(DOC_VALUES_FORMAT); if (initArgs.size() > 0) { throw new RuntimeException( "schema fieldtype " + typeName + "(" + this.getClass().getName() + ")" + " invalid arguments:" + initArgs); } }
@Override protected void init(IndexSchema schema, Map<String, String> args) { properties |= TOKENIZED; if (schema.getVersion() > 1.1F && // only override if it's not explicitly true 0 == (trueProperties & OMIT_TF_POSITIONS)) { properties &= ~OMIT_TF_POSITIONS; } if (schema.getVersion() > 1.3F) { autoGeneratePhraseQueries = false; } else { autoGeneratePhraseQueries = true; } String autoGeneratePhraseQueriesStr = args.remove("autoGeneratePhraseQueries"); if (autoGeneratePhraseQueriesStr != null) autoGeneratePhraseQueries = Boolean.parseBoolean(autoGeneratePhraseQueriesStr); super.init(schema, args); }