You do still need to override QP in 4.x, but you should create a NumericRangeQuery/Filter, not a TermRangeQuery (even in 3.6 as well).
NumericRangeQuery is much more efficient (visits far fewer terms) than TermRangeQuery. Mike McCandless http://blog.mikemccandless.com On Mon, Feb 25, 2013 at 5:50 AM, Paul Taylor <paul_t...@fastmail.fm> wrote: > In my 3.6 code I was adding numeric field to my index as follows: > > public void addNumericField(IndexField field, Integer value) { > addField(field, NumericUtils.intToPrefixCoded(value)); > } > > > but I've chnaged it to (work in progress) > > public void addNumericField(IndexField field, Integer value) { > FieldType ft = new FieldType(); > ft.setStored(true); > ft.setIndexed(true); > ft.setNumericType(FieldType.NumericType.INT); > doc.add(new IntField(field.getName(), value, ft)); > } > > whihc seems neater > > In 3.6 I also add to override queryparser to make it work for numeric range > searches, do I still have to do this and if so how do I modify it to work > for > IntField. > > package org.musicbrainz.search.servlet; > > import org.apache.lucene.index.Term; > import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; > import org.apache.lucene.search.Query; > import org.apache.lucene.search.TermQuery; > import org.apache.lucene.search.TermRangeQuery; > import org.apache.lucene.util.NumericUtils; > import org.musicbrainz.search.LuceneVersion; > import org.musicbrainz.search.index.LabelIndexField; > import org.musicbrainz.search.servlet.mmd1.LabelType; > > public class LabelQueryParser extends MultiFieldQueryParser { > > public LabelQueryParser(java.lang.String[] strings, > org.apache.lucene.analysis.Analyzer analyzer) > { > super(LuceneVersion.LUCENE_VERSION, strings, analyzer); > } > > protected Query newTermQuery(Term term) { > > if( > ( term.field() == LabelIndexField.TYPE.getName()) > > ) { > try { > int typeId = Integer.parseInt(term.text()); > if (typeId >= LabelType.getMinSearchId() && typeId <= > LabelType.getMaxSearchId()) { > TermQuery tq = new TermQuery(new Term(term.field(), > LabelType.getBySearchId(typeId).getName())); > return tq; > } > else { > return super.newTermQuery(term); > } > } > catch(NumberFormatException nfe) { > return super.newTermQuery(term); > > } > } else if( > (term.field() == LabelIndexField.CODE.getName()) > ){ > try { > int number = Integer.parseInt(term.text()); > TermQuery tq = new TermQuery(new Term(term.field(), > NumericUtils.intToPrefixCoded(number))); > return tq; > } > catch (NumberFormatException nfe) { > //If not provided numeric argument just leave as is, won't > give matches > return super.newTermQuery(term); > } > } else { > return super.newTermQuery(term); > > } > } > > /** > * > * Convert Numeric Fields > * > * @param field > * @param part1 > * @param part2 > * @param inclusive > * @return > */ > @Override > public Query newRangeQuery(String field, > String part1, > String part2, > boolean inclusive) { > > if ( > (field.equals(LabelIndexField.CODE.getName())) > ) > { > part1 = NumericUtils.intToPrefixCoded(Integer.parseInt(part1)); > part2 = NumericUtils.intToPrefixCoded(Integer.parseInt(part2)); > } > TermRangeQuery query = (TermRangeQuery) > super.newRangeQuery(field, part1, part2,inclusive); > return query; > } > > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org